From 8ffa788615bb556091304162fa7aae9cddb17807 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 19 Mar 2024 14:29:14 +0100 Subject: [PATCH] IDEA-349990 ui: show "Sort Bookmarks" in menu for non-top-group nodes Make the action a little more discoverable. GitOrigin-RevId: 7baf9396d794049fb6729dffb810df1badc27375 --- .../actions/SortGroupBookmarksAction.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/bookmark/actions/SortGroupBookmarksAction.kt b/platform/lang-impl/src/com/intellij/ide/bookmark/actions/SortGroupBookmarksAction.kt index 401eb8c832b2..1199437be55e 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmark/actions/SortGroupBookmarksAction.kt +++ b/platform/lang-impl/src/com/intellij/ide/bookmark/actions/SortGroupBookmarksAction.kt @@ -2,6 +2,7 @@ package com.intellij.ide.bookmark.actions import com.intellij.ide.bookmark.BookmarksManagerImpl +import com.intellij.ide.bookmark.ui.tree.GroupNode import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.project.DumbAwareAction @@ -12,14 +13,22 @@ internal class SortGroupBookmarksAction : DumbAwareAction() { override fun update(event: AnActionEvent) { val manager = event.bookmarksManager as? BookmarksManagerImpl - val node = manager?.let { event.selectedGroupNode } - val empty = node?.value?.getBookmarks().isNullOrEmpty() - event.presentation.isEnabledAndVisible = !empty + event.presentation.isEnabledAndVisible = manager != null && + getSelectedGroupNodes(event).firstOrNull() != null } override fun actionPerformed(event: AnActionEvent) { val manager = event.bookmarksManager as? BookmarksManagerImpl ?: return - val node = event.selectedGroupNode ?: return - manager.sort(node.value) + val nodes = getSelectedGroupNodes(event) + for (groupNode in nodes) { + manager.sort(groupNode.value) + } + } + + private fun getSelectedGroupNodes(event: AnActionEvent): Sequence { + val nodes = event.bookmarkNodes ?: return emptySequence() + return nodes.asSequence().flatMap { node -> generateSequence(node) { it.parent } } + .filterIsInstance() + .distinct() } }