Bug 4793 Canvas.scroll not working when source y around 65536 (1GIXDPD)
Run the code below and press a key. You will see one pixel line of cheese at the top or bottom depending on which sourceY is used. To make this more obvious divide height by 2. This works fine on NT. import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.*; import org.eclipse.swt.widgets.*; public class PR_1GIXDPD { static boolean scrolled = false; public static void main(String[] args) { final Shell shell = new Shell(); shell.addListener(SWT.KeyDown, new Listener() { public void handleEvent(Event e) { Rectangle clientArea = shell.getClientArea(); int height = clientArea.height; int sourceY = 65536 - (height - 3); // int sourceY = 65536 + (height - 1); // does not work if 65536 - (height - 2) < sourceY < 65536 + height shell.scroll(0, 0, 0, sourceY, clientArea.width, clientArea.height, true); scrolled = true; System.out.println(clientArea); } }); shell.addListener(SWT.Paint, new Listener() { public void handleEvent(Event event) { int lineHeight = 15; if (scrolled == false) { for (int i = 0; i < event.y + event.height; i += lineHeight) { event.gc.drawText("Line " + i, 0, i); } } } }); shell.open(); Display display = shell.getDisplay (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } } } NOTES:
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/SelectionConverter.java
IJavaElement element= SelectionConverter.getElementAtOffset(editor);
		IType type= (IType)element.getAncestor(IJavaElement.TYPE);
		if (type == null) {
			ICompilationUnit unit= SelectionConverter.getInputAsCompilationUnit(editor);
			if (unit != null)
				type= unit.findPrimaryType();
		}
		return type;
	}
	
	public static IJavaElement getInput(JavaEditor editor) {
		if (editor == null)
			return null;
		IEditorInput input= editor.getEditorInput();
		if (input instanceof IClassFileEditorInput)
			return ((IClassFileEditorInput)input).getClassFile();
		IWorkingCopyManager manager= JavaPlugin.getDefault().getWorkingCopyManager();				
		return manager.getWorkingCopy(input);			
	}
	
	public static ICompilationUnit getInputAsCompilationUnit(JavaEditor editor) {
		Object editorInput= SelectionConverter.getInput(editor);
		if (editorInput instanceof ICompilationUnit)
			return (ICompilationUnit)editorInput;
		else
			return null;
	}
	private static IJavaElement[] codeResolve(IJavaElement input, ITextSelection selection) throws JavaModelException {
			if (input instanceof ICodeAssist) {
				IJavaElement[] elements= ((ICodeAssist)input).codeSelect(selection.getOffset(), selection.getLength());