refactoring: use doWork(...) instead of low level transaction control
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DocumentEditor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DocumentEditor.java
index e249a2d..17b78ae 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DocumentEditor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/DocumentEditor.java
@@ -959,27 +959,31 @@
throw new ReadOnlyException(MessageFormat.format("Cannot insert element {0}, because the editor is read-only.", elementName));
}
- final IElement result;
- try {
- editStack.beginWork();
-
- IDocumentFragment selectedFragment = null;
- if (hasSelection()) {
- selectedFragment = getSelectedFragment();
- deleteSelection();
- }
-
- result = apply(new InsertElementEdit(document, cursor.getOffset(), elementName)).getElement();
-
- if (selectedFragment != null) {
- insertFragment(selectedFragment);
- }
- editStack.commitWork();
- } catch (final DocumentValidationException e) {
- editStack.rollbackWork();
- throw e;
+ final ContentRange selectedRange = getSelectedRange();
+ final IDocumentFragment selectedFragment;
+ if (hasSelection()) {
+ selectedFragment = getSelectedFragment();
+ } else {
+ selectedFragment = null;
}
- return result;
+
+ final IElement[] result = new IElement[1];
+ doWork(new Runnable() {
+ @Override
+ public void run() {
+ if (hasSelection()) {
+ apply(new DeleteEdit(document, selectedRange, cursor.getOffset()));
+ }
+
+ result[0] = apply(new InsertElementEdit(document, cursor.getOffset(), elementName)).getElement();
+
+ if (selectedFragment != null) {
+ insertFragment(selectedFragment);
+ }
+ }
+ });
+
+ return result[0];
}
@Override