diff --git a/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java b/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java index 97a2701d9c37..e863d0f12931 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/BaseNavigateToSourceAction.java @@ -41,6 +41,10 @@ public abstract class BaseNavigateToSourceAction extends AnAction implements Dum boolean enabled = target != null; if (ActionPlaces.isPopupPlace(event.getPlace())) { event.getPresentation().setVisible(enabled); + if (!(this instanceof OpenModuleSettingsAction) && OpenModuleSettingsAction.isModuleInProjectViewPopup(event)) { + event.getPresentation().setVisible(false); + return; + } } else { event.getPresentation().setEnabled(enabled); diff --git a/platform/platform-impl/src/com/intellij/ide/actions/OpenModuleSettingsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/OpenModuleSettingsAction.java new file mode 100644 index 000000000000..d986bc3ee80a --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ide/actions/OpenModuleSettingsAction.java @@ -0,0 +1,53 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.ide.actions; + +import com.intellij.ide.projectView.impl.ProjectRootsUtil; +import com.intellij.openapi.actionSystem.ActionPlaces; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; + +/** + * @author Konstantin Bulenkov + */ +public class OpenModuleSettingsAction extends EditSourceAction { + @Override + public void update(AnActionEvent event) { + super.update(event); + if (!isModuleInProjectViewPopup(event)) { + event.getPresentation().setEnabledAndVisible(false); + } + } + + protected static boolean isModuleInProjectViewPopup(AnActionEvent e) { + if (ActionPlaces.PROJECT_VIEW_POPUP.equals(e.getPlace())) { + final Project project = getEventProject(e); + final Module module = LangDataKeys.MODULE.getData(e.getDataContext()); + if (project != null && module != null) { + final VirtualFile moduleFolder = PlatformDataKeys.VIRTUAL_FILE.getData(e.getDataContext()); + if (ProjectRootsUtil.isModuleContentRoot(moduleFolder, project) + || ProjectRootsUtil.isSourceOrTestRoot(moduleFolder, project)) { + return true; + } + } + } + return false; + } +} diff --git a/resources/src/idea/RichPlatformActions.xml b/resources/src/idea/RichPlatformActions.xml index a94da99860a8..1720c84d578f 100644 --- a/resources/src/idea/RichPlatformActions.xml +++ b/resources/src/idea/RichPlatformActions.xml @@ -188,6 +188,7 @@ + @@ -221,9 +222,12 @@ - + + + +