Search code examples
intellij-ideaintellij-plugin

Intellij plugin development, how to prevent an action from occuring, like closing a tab


Is this possible?

I need to subscribe to the event somehow and possibly return false or similar, i am guessing. I have no idea how though.

What event is that?

Where do I register it?

Anyone?

EDIT:

I have tried this:

import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.editor.impl.EditorComponentImpl;
import org.jetbrains.annotations.NotNull;

import java.awt.*;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;

public class MyPlugin implements ApplicationComponent {

    static {
        /*MessageBus bus = ApplicationManager.getApplication().get

        MessageBusConnection connection = bus.connect();

        connection.subscribe(AppTopics.FILE_DOCUMENT_SYNC,
            new FileDocumentManagerAdapter() {
                @Override
                public void beforeDocumentSaving(Document document) {
                    // create your custom logic here
                }
            });*/
    }

    private final AWTEventListener listener;

    public MyPlugin() {
        System.out.println("111111111111111111");
        listener = new AWTEventListener() {

            @Override
            public void eventDispatched(AWTEvent event) {

                if ( event instanceof KeyEvent ) {
                    KeyEvent kv = (KeyEvent) event;
                    Component component = kv.getComponent();

                    if ( component instanceof EditorComponentImpl) {
                        EditorComponentImpl cp = (EditorComponentImpl) component;

                    }

                    System.out.println("3333333" + component.getClass());
                }

                System.out.println("aaaaaaa" + event.getClass());

            }
        };
    }

    @Override
    public void initComponent() {
        System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbbbb");
        Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
    }

    @Override
    public void disposeComponent() {
        Toolkit.getDefaultToolkit().removeAWTEventListener(listener);
    }

    @NotNull
    @Override
    public String getComponentName() {
        return "temp";
    }

}

But it does not work. I get events but the wrong kind.


Solution

  • Two plugins were developed in the end to accomplish this:

    https://plugins.jetbrains.com/space/index?pr=idea&lg=opensource%40momomo.com