mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-168452 Backspace does not change cursor position
handle bulk mode correctly (it's not possible to read caret position in bulk mode)
This commit is contained in:
@@ -16,9 +16,12 @@
|
||||
package com.intellij.openapi.wm.impl.status;
|
||||
|
||||
import com.intellij.ide.util.GotoLineNumberDialog;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.editor.*;
|
||||
import com.intellij.openapi.editor.event.*;
|
||||
import com.intellij.openapi.editor.ex.DocumentBulkUpdateListener;
|
||||
import com.intellij.openapi.editor.ex.DocumentEx;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -27,6 +30,7 @@ import com.intellij.openapi.wm.StatusBarWidget;
|
||||
import com.intellij.ui.UIBundle;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -34,7 +38,8 @@ import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
public class PositionPanel extends EditorBasedWidget
|
||||
implements StatusBarWidget.Multiframe, StatusBarWidget.TextPresentation, CaretListener, SelectionListener, DocumentListener {
|
||||
implements StatusBarWidget.Multiframe, StatusBarWidget.TextPresentation,
|
||||
CaretListener, SelectionListener, DocumentListener, DocumentBulkUpdateListener {
|
||||
private static final int CHAR_COUNT_SYNC_LIMIT = 500_000;
|
||||
private static final String CHAR_COUNT_UNKNOWN = "...";
|
||||
|
||||
@@ -111,6 +116,8 @@ public class PositionPanel extends EditorBasedWidget
|
||||
multicaster.addCaretListener(this, this);
|
||||
multicaster.addSelectionListener(this, this);
|
||||
multicaster.addDocumentListener(this, this);
|
||||
MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect(this);
|
||||
connection.subscribe(DocumentBulkUpdateListener.TOPIC, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -140,6 +147,19 @@ public class PositionPanel extends EditorBasedWidget
|
||||
@Override
|
||||
public void documentChanged(DocumentEvent event) {
|
||||
Document document = event.getDocument();
|
||||
if (document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate()) return;
|
||||
onDocumentUpdate(document);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStarted(@NotNull Document doc) {}
|
||||
|
||||
@Override
|
||||
public void updateFinished(@NotNull Document doc) {
|
||||
onDocumentUpdate(doc);
|
||||
}
|
||||
|
||||
private void onDocumentUpdate(Document document) {
|
||||
Editor[] editors = EditorFactory.getInstance().getEditors(document);
|
||||
Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
|
||||
for (Editor editor : editors) {
|
||||
|
||||
Reference in New Issue
Block a user