Question

I am developing an eclipse plugin and facing an issue:

Supposing you have couple of editors open and you right click on the project in "project explorer" then delete it. What is the clean way to notify all the related open editors so they should be closed and removed from the view? Actually when deleting the project, all the editors remain open so inconsistent state.

Any ideas would be appreciated :)

Was it helpful?

Solution

Here's my solution for Indigo, where MyEditor listens to project closing events, and closes itself if its file belongs to the project being closed.

public class MyEditor extends EditorPart {
    private final Display display = Display.getCurrent();

    private IResourceChangeListener editorCloser = new IResourceChangeListener() {
        public void resourceChanged(IResourceChangeEvent event) {
            final IResource closingProject = event.getResource();
            Display.getDefault().asyncExec(new Runnable(){
                public void run() {
                    for (IWorkbenchPage page : getSite().getWorkbenchWindow().getPages()) {
                        FileEditorInput editorInput = (FileEditorInput) MyEditor.this.getEditorInput();
                        if (editorInput.getFile().getProject().equals(closingProject))
                            page.closeEditor(page.findEditor(editorInput), true);
                    }
                }
            });
        }   
    };

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        [...]
        ResourcesPlugin.getWorkspace().addResourceChangeListener(editorCloser,
            IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE);
    }

    public void dispose() {
        super.dispose();
        ResourcesPlugin.getWorkspace().removeResourceChangeListener(editorCloser);
    }
}

It puzzles me Eclipse's default behaviour isn't to close editors when their project closes.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top