mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-136853 readonly locker doesn't work well between splits
This commit is contained in:
+19
-25
@@ -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<MouseEvent> getClickConsumer() {
|
||||
return new Consumer<MouseEvent>() {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user