JBTextField in InlayModel cannot certain keycommands

Hello.

I added a JBTextField to the InlayModel and obtained the focus, which is working when inputting a single character.

But when I press special keys such as Ctrl+A, Backspace, etc., it becomes passing through to the bottom to change the editor.

I have tried it in 2020.3 and 2024.3.4.1, and the results are the same.

My core code is:

import com.intellij.openapi.Disposable;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorCustomElementRenderer;
import com.intellij.openapi.editor.Inlay;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.ui.components.JBTextField;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import java.awt.*;

public class GenerateRenderer extends JPanel implements EditorCustomElementRenderer {
    private final JBTextField inputField = new JBTextField();

    public GenerateRenderer(Editor editor) {
        setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.gridy = 0;
        c.gridx = 0;
        add(inputField, c);

        editor.getContentComponent().add(this);
        editor.getInlayModel().addBlockElement(editor.getSelectionModel().getSelectionStart(), false, true, 1, this);

        inputField.requestFocus();
        inputField.requestFocusInWindow();
        IdeFocusManager.getInstance(editor.getProject()).requestFocus(inputField, true);
    }

    @Override
    public void paint(@NotNull Inlay inlay, @NotNull Graphics graphics, @NotNull Rectangle rectangle, @NotNull TextAttributes textAttributes) {
        Rectangle it = inlay.getBounds();
        if (it != null && !this.getBounds().equals(it)) {
            this.setBounds(it);
            this.revalidate();
            this.repaint();
        }
    }

    @Override
    public int calcWidthInPixels(@NotNull Inlay inlay) {
        return getSize().width;
    }

    @Override
    public int calcHeightInPixels(@NotNull Inlay inlay) {
        return getSize().height;
    }
}

Thank you in advance for any help!

Hi @zhengshengh! Looks like you have to implement KeyboardAwareFocusOwner - intellij-community/platform/platform-impl/src/com/intellij/ide/KeyboardAwareFocusOwner.java at 8c9a8c358b9fae54828ed283e7b6bab90b87ee9a · JetBrains/intellij-community · GitHub

It’s working well now, thank you very much!