From 37f696031169da8ffa782c8b82090f0f3ffb66b2 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 24 Feb 2015 12:26:03 +0300 Subject: [PATCH] IDEA-136853 readonly locker doesn't work well between splits --- .../status/ToggleReadOnlyAttributePanel.java | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java index b01c167917d9..3b89e81eb1f5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java @@ -20,7 +20,8 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; +import com.intellij.openapi.fileEditor.impl.EditorsSplitters; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vfs.VirtualFile; @@ -42,13 +43,7 @@ public class ToggleReadOnlyAttributePanel implements StatusBarWidget.Multiframe, @NotNull public Icon getIcon() { - Project project = getProject(); - VirtualFile virtualFile = null; - if (project != null) { - FileEditorManager editorManager = FileEditorManager.getInstance(project); - VirtualFile[] selectedFiles = editorManager.getSelectedFiles(); - virtualFile = selectedFiles.length > 0 ? selectedFiles[0] : null; - } + VirtualFile virtualFile = getCurrentFile(); return virtualFile == null || virtualFile.isWritable() ? AllIcons.Ide.Readwrite : AllIcons.Ide.Readonly; } @@ -82,13 +77,8 @@ public class ToggleReadOnlyAttributePanel implements StatusBarWidget.Multiframe, public Consumer getClickConsumer() { return new Consumer() { public void consume(MouseEvent mouseEvent) { - final Project project = getProject(); - if (project == null) { - return; - } - final FileEditorManager editorManager = FileEditorManager.getInstance(project); - final VirtualFile[] files = editorManager.getSelectedFiles(); - if (!isReadOnlyApplicableForFiles(files)) { + final VirtualFile file = getCurrentFile(); + if (!isReadOnlyApplicableForFile(file)) { return; } FileDocumentManager.getInstance().saveAllDocuments(); @@ -96,11 +86,11 @@ public class ToggleReadOnlyAttributePanel implements StatusBarWidget.Multiframe, ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { try { - ReadOnlyAttributeUtil.setReadOnlyAttribute(files[0], files[0].isWritable()); + ReadOnlyAttributeUtil.setReadOnlyAttribute(file, file.isWritable()); myStatusBar.updateWidget(ID()); } catch (IOException e) { - Messages.showMessageDialog(project, e.getMessage(), UIBundle.message("error.dialog.title"), Messages.getErrorIcon()); + Messages.showMessageDialog(getProject(), e.getMessage(), UIBundle.message("error.dialog.title"), Messages.getErrorIcon()); } } }); @@ -109,20 +99,24 @@ public class ToggleReadOnlyAttributePanel implements StatusBarWidget.Multiframe, } private boolean isReadonlyApplicable() { - final Project project = getProject(); - if (project == null) return false; - final FileEditorManager editorManager = FileEditorManager.getInstance(project); - if (editorManager == null) return false; - VirtualFile[] selectedFiles = editorManager.getSelectedFiles(); - return isReadOnlyApplicableForFiles(selectedFiles); + VirtualFile file = getCurrentFile(); + return isReadOnlyApplicableForFile(file); } - private static boolean isReadOnlyApplicableForFiles(final VirtualFile[] files) { - return files.length > 0 && !files[0].getFileSystem().isReadOnly(); + private static boolean isReadOnlyApplicableForFile(@Nullable VirtualFile file) { + return file != null && !file.getFileSystem().isReadOnly(); } @Nullable private Project getProject() { return CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((JComponent) myStatusBar)); } + + @Nullable + private VirtualFile getCurrentFile() { + final Project project = getProject(); + if (project == null) return null; + EditorsSplitters splitters = FileEditorManagerEx.getInstanceEx(project).getSplittersFor(myStatusBar.getComponent()); + return splitters.getCurrentFile(); + } }