IDEA-127739 Navigation Tab
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / actionSystem / impl / Utils.java
index 85c0555f9bc6756c328eed4263eed7a516ab6815..9af1d30c28bf4e7e7a555dfa7fd4a1f8fd4a35c5 100644 (file)
@@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.ActionCallback;
 import com.intellij.openapi.util.SystemInfo;
 import com.intellij.openapi.util.registry.Registry;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.wm.IdeFocusManager;
 import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NonNls;
@@ -164,7 +165,7 @@ public class Utils{
         }
       }
       else if (child instanceof Separator) {
-        if (!list.isEmpty() && !(list.get(list.size() - 1) instanceof Separator)) {
+        if (!StringUtil.isEmpty(((Separator)child).getText()) || (!list.isEmpty() && !(list.get(list.size() - 1) instanceof Separator))) {
           list.add(child);
         }
       }
@@ -284,8 +285,10 @@ public class Utils{
     for (int i = 0, size = list.size(); i < size; i++) {
       final AnAction action = list.get(i);
       if (action instanceof Separator) {
-        if (i > 0 && i < size - 1) {
+        final String text = ((Separator)action).getText();
+        if (!StringUtil.isEmpty(text) || (i > 0 && i < size - 1)) {
           component.add(new JPopupMenu.Separator() {
+            private final JMenuItem myMenu = !StringUtil.isEmpty(text) ? new JMenuItem(text) : null;
             @Override
             public Insets getInsets() {
               final Insets insets = super.getInsets();
@@ -295,13 +298,30 @@ public class Utils{
               return fix ? new Insets(2, insets.left, 3, insets.right) : insets;  // workaround for Sun bug #6636964
             }
 
+            @Override
+            public void doLayout() {
+              super.doLayout();
+              if (myMenu != null) {
+                myMenu.setBounds(getBounds());
+              }
+            }
+
             @Override
             protected void paintComponent(Graphics g) {
               if (UIUtil.isUnderWindowsClassicLookAndFeel() || UIUtil.isUnderDarcula() || UIUtil.isUnderWindowsLookAndFeel()) {
                 g.setColor(component.getBackground());
                 g.fillRect(0, 0, getWidth(), getHeight());
               }
-              super.paintComponent(g);
+              if (myMenu != null) {
+                myMenu.paint(g);
+              } else {
+                super.paintComponent(g);
+              }
+            }
+
+            @Override
+            public Dimension getPreferredSize() {
+              return myMenu != null ? myMenu.getPreferredSize() : super.getPreferredSize();
             }
           });
         }