[platform] wrap WelcomeFrame actions with invokeLater

WelcomeFrame actions such as `Create New Project`, `Import Project` and `Open` do open modal dialog that consumes MouseEvent.MOUSE_CLICKED. This behavior breaks GUI Script generation because we are not able to rely on listening MOUSE_CLICKED event on ActionLink. Therefore we wrap these actions with invokeLater what gives us an assurance that MOUSE_CLICKED event will not be consumed anymore.
This commit is contained in:
Sergey Karashevich
2018-04-06 18:45:07 +03:00
parent b1fed18322
commit cd5e044328
3 changed files with 10 additions and 3 deletions
@@ -17,6 +17,7 @@ package com.intellij.ide.actions;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen;
/**
@@ -26,7 +27,7 @@ import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen;
public class ImportProjectAction extends ImportModuleAction {
@Override
public void actionPerformed(AnActionEvent e) {
doImport(null);
ApplicationManager.getApplication().invokeLater(() -> doImport(null));
}
@Override
@@ -20,6 +20,7 @@ import com.intellij.ide.impl.NewProjectUtil;
import com.intellij.ide.projectWizard.NewProjectWizard;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen;
@@ -33,7 +34,7 @@ public class NewProjectAction extends AnAction implements DumbAware {
public void actionPerformed(AnActionEvent e) {
NewProjectWizard wizard = new NewProjectWizard(null, ModulesProvider.EMPTY_MODULES_PROVIDER, null);
NewProjectUtil.createNewProject(getEventProject(e), wizard);
ApplicationManager.getApplication().invokeLater(() -> NewProjectUtil.createNewProject(getEventProject(e), wizard));
}
@Override
@@ -10,6 +10,7 @@ import com.intellij.ide.highlighter.ProjectFileType;
import com.intellij.ide.impl.ProjectUtil;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
@@ -43,6 +44,10 @@ import java.util.List;
public class OpenFileAction extends AnAction implements DumbAware {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
ApplicationManager.getApplication().invokeLater(() -> prepareFileChooserAndOpen(e));
}
private void prepareFileChooserAndOpen(@NotNull AnActionEvent e) {
final Project project = e.getProject();
final boolean showFiles = project != null || PlatformProjectOpenProcessor.getInstanceIfItExists() != null;
final FileChooserDescriptor descriptor = showFiles ? new ProjectOrFileChooserDescriptor() : new ProjectOnlyFileChooserDescriptor();
@@ -54,7 +59,7 @@ public class OpenFileAction extends AnAction implements DumbAware {
descriptor.putUserData(PathChooserDialog.PREFER_LAST_OVER_EXPLICIT, toSelect == null && showFiles);
FileChooser.chooseFiles(descriptor, project, toSelect != null? toSelect : getPathToSelect(), files -> {
FileChooser.chooseFiles(descriptor, project, toSelect != null ? toSelect : getPathToSelect(), files -> {
for (VirtualFile file : files) {
if (!descriptor.isFileSelectable(file)) {
String message = IdeBundle.message("error.dir.contains.no.project", file.getPresentableUrl());