From 7105461736e0c7d199778d46ae46bb888a1f33b1 Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Tue, 24 May 2016 17:20:55 +0300 Subject: [PATCH] IDEA-156004 Mac OS: black stripes appear at the top and thr bottom of IDEA window after restarting in full screen --- .../openapi/wm/impl/IdeFrameImpl.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java index b60c1c27faf8..8b3665d6d42f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java @@ -32,8 +32,10 @@ import com.intellij.openapi.actionSystem.impl.MouseGestureManager; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationInfo; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.application.ex.ApplicationManagerEx; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.impl.ShadowPainter; @@ -66,12 +68,16 @@ import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; +import java.lang.reflect.Field; /** * @author Anton Katilin * @author Vladimir Kondratyev */ public class IdeFrameImpl extends JFrame implements IdeFrameEx, AccessibleContextAccessor, DataProvider { + + private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.IdeFrameImpl"); + public static final Key SHOULD_OPEN_IN_FULL_SCREEN = Key.create("should.open.in.full.screen"); private static final String FULL_SCREEN = "FullScreen"; @@ -549,7 +555,7 @@ public class IdeFrameImpl extends JFrame implements IdeFrameEx, AccessibleContex } public Rectangle suggestChildFrameBounds() { -//todo [kirillk] a dummy implementation + //todo [kirillk] a dummy implementation final Rectangle b = getBounds(); b.x += 100; b.width -= 200; @@ -570,6 +576,9 @@ public class IdeFrameImpl extends JFrame implements IdeFrameEx, AccessibleContex @NotNull @Override public ActionCallback toggleFullScreen(boolean state) { + + if (temporaryFixForIdea156004(state)) return ActionCallback.DONE; + if (myFrameDecorator != null) { return myFrameDecorator.toggleFullScreen(state); } @@ -581,6 +590,29 @@ public class IdeFrameImpl extends JFrame implements IdeFrameEx, AccessibleContex return ActionCallback.DONE; } + private boolean temporaryFixForIdea156004(final boolean state) { + if (SystemInfo.isMac) { + try { + Field modalBlockerField = Window.class.getDeclaredField("modalBlocker"); + modalBlockerField.setAccessible(true); + final Window modalBlocker = (Window)modalBlockerField.get(this); + if (modalBlocker != null) { + ApplicationManager.getApplication().invokeLater(() -> { + toggleFullScreen(state); + }, ModalityState.NON_MODAL); + return true; + } + } + catch (NoSuchFieldException e) { + LOG.error(e); + } + catch (IllegalAccessException e) { + LOG.error(e); + } + } + return false; + } + @Override public AccessibleContext getAccessibleContext() { if (accessibleContext == null) {