mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
editor typing: narrow the scope of transactions (IDEA-CR-9167)
This commit is contained in:
@@ -15,9 +15,11 @@
|
||||
*/
|
||||
package com.intellij.openapi.editor.actionSystem;
|
||||
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.application.AccessToken;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.TransactionGuard;
|
||||
import com.intellij.openapi.application.TransactionKind;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.UndoConfirmationPolicy;
|
||||
import com.intellij.openapi.editor.*;
|
||||
@@ -136,11 +138,9 @@ public class TypedAction {
|
||||
private class DefaultRawHandler implements TypedActionHandler {
|
||||
@Override
|
||||
public void execute(@NotNull final Editor editor, final char charTyped, @NotNull final DataContext dataContext) {
|
||||
CommandProcessor.getInstance().executeCommand(
|
||||
CommonDataKeys.PROJECT.getData(dataContext),
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try (AccessToken ignored = TransactionGuard.getInstance().startSynchronousTransaction(TransactionKind.TEXT_EDITING)) {
|
||||
CommandProcessor.getInstance().executeCommand(
|
||||
editor.getProject(), () -> {
|
||||
if (!FileDocumentManager.getInstance().requestWriting(editor.getDocument(), editor.getProject())) {
|
||||
return;
|
||||
}
|
||||
@@ -160,9 +160,9 @@ public class TypedAction {
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
"", editor.getDocument(), UndoConfirmationPolicy.DEFAULT, editor.getDocument());
|
||||
},
|
||||
"", editor.getDocument(), UndoConfirmationPolicy.DEFAULT, editor.getDocument());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -989,10 +989,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
if (event.isConsumed()) {
|
||||
return;
|
||||
}
|
||||
try (AccessToken ignored = TransactionGuard.getInstance().startSynchronousTransaction(TransactionKind.TEXT_EDITING)) {
|
||||
if (processKeyTyped(event)) {
|
||||
event.consume();
|
||||
}
|
||||
if (processKeyTyped(event)) {
|
||||
event.consume();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1123,19 +1121,14 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
public ActionCallback type(@NotNull final String text) {
|
||||
final ActionCallback result = new ActionCallback();
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
if (!processKeyTyped(text.charAt(i))) {
|
||||
result.setRejected();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
result.setDone();
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
if (!processKeyTyped(text.charAt(i))) {
|
||||
result.setRejected();
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
result.setDone();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user