From 3af2539c7d52b2ca4a7743c8a26bd739d6b2d310 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Mon, 13 Oct 2014 16:03:42 +0400 Subject: [PATCH] IDEA-35490 Maximized IDEA main window forgets it's non-maximum size after restart --- .../openapi/wm/impl/WindowManagerImpl.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java index 17883b2493fe..6a326f1a70d4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java @@ -612,7 +612,12 @@ public final class WindowManagerImpl extends WindowManagerEx implements NamedCom } frame.addWindowListener(myActivationListener); - + frame.addComponentListener(new ComponentAdapter() { + @Override + public void componentMoved(@NotNull ComponentEvent e) { + updateFrameBounds(frame); + } + }); myEventDispatcher.getMulticaster().frameCreated(frame); return frame; @@ -778,7 +783,21 @@ public final class WindowManagerImpl extends WindowManagerEx implements NamedCom return null; } + int extendedState = updateFrameBounds(frame); + Rectangle rectangle = myFrameBounds; final Element frameElement = new Element(FRAME_ELEMENT); + frameElement.setAttribute(X_ATTR, Integer.toString(rectangle.x)); + frameElement.setAttribute(Y_ATTR, Integer.toString(rectangle.y)); + frameElement.setAttribute(WIDTH_ATTR, Integer.toString(rectangle.width)); + frameElement.setAttribute(HEIGHT_ATTR, Integer.toString(rectangle.height)); + + if (!(frame.isInFullScreen() && SystemInfo.isAppleJvm)) { + frameElement.setAttribute(EXTENDED_STATE_ATTR, Integer.toString(extendedState)); + } + return frameElement; + } + + private int updateFrameBounds(IdeFrameImpl frame) { int extendedState = frame.getExtendedState(); if (SystemInfo.isMacOSLion) { @SuppressWarnings("deprecation") ComponentPeer peer = frame.getPeer(); @@ -792,16 +811,10 @@ public final class WindowManagerImpl extends WindowManagerEx implements NamedCom boolean usePreviousBounds = isMaximized && myFrameBounds != null && frame.getBounds().contains(new Point((int)myFrameBounds.getCenterX(), (int)myFrameBounds.getCenterY())); - Rectangle rectangle = usePreviousBounds ? myFrameBounds : frame.getBounds(); - frameElement.setAttribute(X_ATTR, Integer.toString(rectangle.x)); - frameElement.setAttribute(Y_ATTR, Integer.toString(rectangle.y)); - frameElement.setAttribute(WIDTH_ATTR, Integer.toString(rectangle.width)); - frameElement.setAttribute(HEIGHT_ATTR, Integer.toString(rectangle.height)); - - if (!(frame.isInFullScreen() && SystemInfo.isAppleJvm)) { - frameElement.setAttribute(EXTENDED_STATE_ATTR, Integer.toString(extendedState)); + if (!usePreviousBounds) { + myFrameBounds = frame.getBounds(); } - return frameElement; + return extendedState; } @Override