From cd5e0443288cd5c530e2143acd57ed8024de3bfe Mon Sep 17 00:00:00 2001 From: Sergey Karashevich Date: Fri, 6 Apr 2018 18:25:56 +0300 Subject: [PATCH] [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. --- .../src/com/intellij/ide/actions/ImportProjectAction.java | 3 ++- .../src/com/intellij/ide/actions/NewProjectAction.java | 3 ++- .../src/com/intellij/ide/actions/OpenFileAction.java | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java b/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java index 63780a4d99bd..bfd423a1499c 100644 --- a/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java +++ b/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java @@ -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 diff --git a/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java b/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java index 33bd7f825b09..0926001877cf 100644 --- a/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java +++ b/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java @@ -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 diff --git a/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java b/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java index 758b8094584e..dc052b36e9b9 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java @@ -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());