diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 732a8b02e..4578038f3 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1473,6 +1473,7 @@ public class Base { customMenu.putClientProperty("platform", getPlatformUniqueId(targetPlatform)); customMenu.putClientProperty("removeOnWindowDeactivation", true); boardsCustomMenus.add(customMenu); + MenuScroller.setScrollerFor(customMenu); } } } diff --git a/app/src/processing/app/tools/MenuScroller.java b/app/src/processing/app/tools/MenuScroller.java index 9e9aacbca..d934a4583 100644 --- a/app/src/processing/app/tools/MenuScroller.java +++ b/app/src/processing/app/tools/MenuScroller.java @@ -16,6 +16,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.event.KeyEvent; +import java.util.Arrays; /** * A class that provides scrolling capabilities to a long menu dropdown or @@ -33,6 +34,7 @@ public class MenuScroller { private JPopupMenu menu; private Component[] menuItems; + private Component[] allMenuItems; private MenuScrollItem upItem; private MenuScrollItem downItem; private final MenuScrollListener menuListener = new MenuScrollListener(); @@ -539,7 +541,8 @@ public class MenuScroller { } private void setMenuItems() { - menuItems = menu.getComponents(); + allMenuItems = menu.getComponents(); + menuItems = Arrays.stream(allMenuItems).filter(x -> x.isVisible()).toArray(Component[]::new); if (keepVisibleIndex >= topFixedCount && keepVisibleIndex <= menuItems.length - bottomFixedCount && (keepVisibleIndex > firstIndex + scrollCount @@ -554,7 +557,7 @@ public class MenuScroller { private void restoreMenuItems() { menu.removeAll(); - for (Component component : menuItems) { + for (Component component : allMenuItems) { menu.add(component); } }