IDEA-156004 Mac OS: black stripes appear at the top and thr bottom of IDEA window after restarting in full screen

This commit is contained in:
Denis Fokin
2016-05-24 17:28:11 +03:00
parent 87a82c3666
commit 7105461736
@@ -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<Boolean> 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) {