From 695e76dbe88be9792b8939c10e4ddcc952825f2b Mon Sep 17 00:00:00 2001 From: Ilia Zakoulov Date: Tue, 18 Nov 2025 19:03:12 +0100 Subject: [PATCH] PY-84031: Welcome screen should use canOpenFilesFromSystemFileManager to decide if it should open non-project files Space-RevId: 498f6f351ca3cf9541c93cb7d9483e05586ed02b GitOrigin-RevId: 0a0da55dc35a9aa3061405f3b1ad266ba70b3044 --- .../WelcomeScreenCommandLineProjectOpenProcessor.kt | 5 ++++- .../openapi/wm/ex/WelcomeScreenProjectProvider.kt | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/platform/non-modal-welcome-screen/src/com/intellij/platform/ide/nonModalWelcomeScreen/WelcomeScreenCommandLineProjectOpenProcessor.kt b/platform/non-modal-welcome-screen/src/com/intellij/platform/ide/nonModalWelcomeScreen/WelcomeScreenCommandLineProjectOpenProcessor.kt index d712a33f7315..2835f2b39d3a 100644 --- a/platform/non-modal-welcome-screen/src/com/intellij/platform/ide/nonModalWelcomeScreen/WelcomeScreenCommandLineProjectOpenProcessor.kt +++ b/platform/non-modal-welcome-screen/src/com/intellij/platform/ide/nonModalWelcomeScreen/WelcomeScreenCommandLineProjectOpenProcessor.kt @@ -44,7 +44,10 @@ private abstract class DummyProjectOpenProcessor(override val name: String) : Pr private class WelcomeScreenCommandLineProjectOpenProcessor : DummyProjectOpenProcessor("WelcomeScreenCommandLineProjectOpenProcessor") { override suspend fun openProjectAndFile(file: Path, tempProject: Boolean, options: OpenProjectTask): Project? { val provider = getWelcomeScreenProjectProvider() ?: return null - return openWelcomeScreenProject(file) + if (provider.canOpenFilesFromSystemFileManager()) { + return openWelcomeScreenProject(file) + } + return null } private suspend fun openWelcomeScreenProject(file: Path): Project { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/ex/WelcomeScreenProjectProvider.kt b/platform/platform-impl/src/com/intellij/openapi/wm/ex/WelcomeScreenProjectProvider.kt index c55ca48dd51f..b32238d556d9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/ex/WelcomeScreenProjectProvider.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/ex/WelcomeScreenProjectProvider.kt @@ -72,6 +72,10 @@ abstract class WelcomeScreenProjectProvider { return getWelcomeScreenProjectProvider()?.getWelcomeScreenProjectPath() } + fun canOpenFilesFromSystemFileManager(): Boolean { + return getWelcomeScreenProjectProvider()?.canOpenFilesFromSystemFileManager() ?: false + } + suspend fun createOrOpenWelcomeScreenProject(extension: WelcomeScreenProjectProvider): Project { val projectPath = extension.getWelcomeScreenProjectPath() @@ -93,6 +97,11 @@ abstract class WelcomeScreenProjectProvider { } } + /** + * Return true if the welcome screen project can open non-project files from the file manager (Explorer, Finder). + */ + abstract fun canOpenFilesFromSystemFileManager(): Boolean + protected open fun getWelcomeScreenProjectPath(): Path { return ProjectUtil.getProjectPath(getWelcomeScreenProjectName()).absolute() }