Fixed bug 67500 (try 2): [projection] Unfolding code eats first keystroke
diff --git a/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java b/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java
index 1dde1e6..01a2266 100644
--- a/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java
+++ b/org.eclipse.jface.text/projection/org/eclipse/jface/text/source/projection/ProjectionViewer.java
@@ -1282,15 +1282,18 @@
* @see org.eclipse.jface.text.TextViewer#handleVerifyEvent(org.eclipse.swt.events.VerifyEvent)
*/
protected void handleVerifyEvent(VerifyEvent e) {
+ Point selection= getSelectedRange();
IRegion modelRange= event2ModelRange(e);
if (exposeModelRange(modelRange)) {
e.doit= false;
- IRegion widgetRange= modelRange2WidgetRange(modelRange);
try {
- int insertOffset= widgetRange.getOffset();
- getDocument().replace(insertOffset, widgetRange.getLength(), e.text);
- int caretOffset= insertOffset + e.text.length();
- getTextWidget().setSelection(caretOffset, caretOffset);
+ if (selection.y == 0 && e.text.length() <= 1 && modelRange.getLength() == 1) {
+ selection.y= 1;
+ if (selection.x - 1 == modelRange.getOffset())
+ selection.x--;
+ }
+ getDocument().replace(selection.x, selection.y, e.text);
+ setSelectedRange(selection.x + e.text.length(), 0);
} catch (BadLocationException e1) {
// ignore as nothing bad happens (no log at this level)
}