From 35c8ec51eafe590d7907b73d83af2d3881617838 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 1 Feb 2016 15:53:53 +0100 Subject: [PATCH] support custom decorated frames --- .../intellij/openapi/wm/impl/IdeRootPane.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java index 5f0ae688b02d..98d940093217 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java @@ -23,6 +23,7 @@ import com.intellij.ide.actions.ViewToolbarAction; import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.UISettingsListener; import com.intellij.ide.ui.customization.CustomActionsSchema; +import com.intellij.ide.ui.laf.darcula.ui.DarculaRootPaneUI; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ActionManagerEx; import com.intellij.openapi.application.Application; @@ -31,6 +32,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.*; import com.intellij.openapi.wm.ex.IdeFrameEx; import com.intellij.openapi.wm.impl.status.IdeStatusBarImpl; @@ -88,6 +90,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener { public IdeRootPane(ActionManagerEx actionManager, UISettings uiSettings, DataManager dataManager, Application application, final IdeFrame frame) { if (SystemInfo.isWindows && (UIUtil.isUnderDarcula() || UIUtil.isUnderIntelliJLaF()) && frame instanceof IdeFrameImpl) { + //setUI(DarculaRootPaneUI.createUI(this)); setWindowDecorationStyle(FRAME); } myActionManager = actionManager; @@ -108,14 +111,16 @@ public class IdeRootPane extends JRootPane implements UISettingsListener { myContentPane.add(myStatusBar, BorderLayout.SOUTH); if (WindowManagerImpl.isFloatingMenuBarSupported()) { - menuBar = new IdeMenuBar(actionManager, dataManager); - getLayeredPane().add(menuBar, new Integer(JLayeredPane.DEFAULT_LAYER - 1)); - if (frame instanceof IdeFrameEx) { - addPropertyChangeListener(WindowManagerImpl.FULL_SCREEN, new PropertyChangeListener() { - @Override public void propertyChange(PropertyChangeEvent evt) { - myFullScreen = ((IdeFrameEx)frame).isInFullScreen(); - } - }); + if (!isDecoratedMenu()) { + menuBar = new IdeMenuBar(actionManager, dataManager); + getLayeredPane().add(menuBar, new Integer(JLayeredPane.DEFAULT_LAYER - 1)); + if (frame instanceof IdeFrameEx) { + addPropertyChangeListener(WindowManagerImpl.FULL_SCREEN, new PropertyChangeListener() { + @Override public void propertyChange(PropertyChangeEvent evt) { + myFullScreen = ((IdeFrameEx)frame).isInFullScreen(); + } + }); + } } } else { @@ -353,7 +358,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener { else { rd = parent.getSize(); } - if (menuBar != null && menuBar.isVisible() && !myFullScreen) { + if (menuBar != null && menuBar.isVisible() && !myFullScreen && !isDecoratedMenu()) { mbd = menuBar.getPreferredSize(); } else { @@ -427,4 +432,8 @@ public class IdeRootPane extends JRootPane implements UISettingsListener { } } } + + public boolean isDecoratedMenu() { + return SystemInfo.isWindows && getUI() instanceof DarculaRootPaneUI && Registry.is("ide.win.frame.decoration"); + } }