[146849] org.eclipse.jface.text.TextViewer.shiftLeft required too much time
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
index ccacf5a..cc42573 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextViewer.java
@@ -51,7 +51,9 @@
 import org.eclipse.swt.events.VerifyEvent;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.sse.core.StructuredModelManager;
 import org.eclipse.wst.sse.core.internal.cleanup.StructuredContentCleanupHandler;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.sse.core.internal.undo.IDocumentSelectionMediator;
 import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager;
@@ -505,7 +507,7 @@
 			case SHIFT_RIGHT :
 				beginRecording(TEXT_SHIFT_RIGHT, TEXT_SHIFT_RIGHT, cursorPosition, selectionLength);
 				updateIndentationPrefixes();
-				super.doOperation(SHIFT_RIGHT);
+				doModelOperation(SHIFT_RIGHT);
 				selection = getTextWidget().getSelection();
 				cursorPosition = selection.x;
 				selectionLength = selection.y - selection.x;
@@ -514,7 +516,7 @@
 			case SHIFT_LEFT :
 				beginRecording(TEXT_SHIFT_LEFT, TEXT_SHIFT_LEFT, cursorPosition, selectionLength);
 				updateIndentationPrefixes();
-				super.doOperation(SHIFT_LEFT);
+				doModelOperation(SHIFT_LEFT);
 				selection = getTextWidget().getSelection();
 				cursorPosition = selection.x;
 				selectionLength = selection.y - selection.x;
@@ -643,6 +645,21 @@
 		}
 	}
 
+	/**
+	 * Perform the operation under a model change event
+	 * @param operation the operation to perform
+	 */
+	private void doModelOperation(int operation) {
+		IStructuredModel model = StructuredModelManager.getModelManager().getModelForRead((IStructuredDocument) getDocument());
+		model.aboutToChangeModel();
+		try {
+			super.doOperation(operation);
+		}
+		finally {
+			model.changedModel();
+		}
+	}
+
 	private void endRecording(int cursorPosition, int selectionLength) {
 		IDocument doc = getDocument();
 		if (doc instanceof IStructuredDocument) {