support custom decorated frames

This commit is contained in:
Konstantin Bulenkov
2016-02-01 15:53:53 +01:00
parent aae3ee546d
commit 35c8ec51ea
@@ -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");
}
}