From de75ce1609bd329c40bcc415e973d02339c0f326 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 5 Sep 2019 13:20:08 +0200 Subject: [PATCH] get rid of class casts to IdeFrameEx (part 1): move isInFullScreen to IdeFrame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isInFullScreen is a light method — returns boolean. GitOrigin-RevId: e793d5d5c562a8fec5d1deb38196df231bfd756e --- .../src/com/intellij/ide/impl/NewProjectUtil.java | 11 +++-------- .../openapi/wm/impl/AbstractTraverseWindowAction.java | 5 ++--- .../src/com/intellij/openapi/wm/IdeFrame.java | 4 ++++ .../src/com/intellij/ide/IdeEventQueue.java | 3 +-- .../src/com/intellij/ide/IdePopupManager.java | 6 +++--- .../src/com/intellij/openapi/wm/ex/IdeFrameEx.java | 2 -- .../com/intellij/openapi/wm/impl/IdeFrameImpl.java | 1 + .../src/com/intellij/openapi/wm/impl/IdeMenuBar.java | 11 +++++------ .../platform-impl/src/com/intellij/ui/AppUIUtil.java | 8 +++----- .../util/ui/src/com/intellij/ui/ComponentUtil.java | 9 +++++++++ platform/util/ui/src/com/intellij/util/ui/UIUtil.java | 6 ------ 11 files changed, 31 insertions(+), 35 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java b/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java index 19a3f247f27e..20e2cd6f48ac 100644 --- a/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java +++ b/java/idea-ui/src/com/intellij/ide/impl/NewProjectUtil.java @@ -31,7 +31,6 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.wm.*; -import com.intellij.openapi.wm.ex.IdeFrameEx; import com.intellij.openapi.wm.impl.IdeFrameImpl; import com.intellij.pom.java.LanguageLevel; import com.intellij.util.ui.UIUtil; @@ -160,13 +159,9 @@ public class NewProjectUtil { ProjectUtil.updateLastProjectLocation(projectFilePath); if (WindowManager.getInstance().isFullScreenSupportedInCurrentOS()) { - IdeFocusManager instance = IdeFocusManager.findInstance(); - IdeFrame lastFocusedFrame = instance.getLastFocusedFrame(); - if (lastFocusedFrame instanceof IdeFrameEx) { - boolean fullScreen = ((IdeFrameEx)lastFocusedFrame).isInFullScreen(); - if (fullScreen) { - newProject.putUserData(IdeFrameImpl.SHOULD_OPEN_IN_FULL_SCREEN, Boolean.TRUE); - } + IdeFrame lastFocusedFrame = IdeFocusManager.findInstance().getLastFocusedFrame(); + if (lastFocusedFrame != null && lastFocusedFrame.isInFullScreen()) { + newProject.putUserData(IdeFrameImpl.SHOULD_OPEN_IN_FULL_SCREEN, Boolean.TRUE); } } diff --git a/platform/lang-impl/src/com/intellij/openapi/wm/impl/AbstractTraverseWindowAction.java b/platform/lang-impl/src/com/intellij/openapi/wm/impl/AbstractTraverseWindowAction.java index 626d368d7aa7..b93a3e061849 100644 --- a/platform/lang-impl/src/com/intellij/openapi/wm/impl/AbstractTraverseWindowAction.java +++ b/platform/lang-impl/src/com/intellij/openapi/wm/impl/AbstractTraverseWindowAction.java @@ -6,10 +6,9 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.ui.AppUIUtil; +import com.intellij.ui.ComponentUtil; import com.intellij.util.Function; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.awt.*; @@ -17,7 +16,7 @@ public abstract class AbstractTraverseWindowAction extends AnAction { protected void doPerform(@NotNull Function mapWindow) { Window w = WindowManagerEx.getInstanceEx().getMostRecentFocusedWindow(); - if (!w.isVisible() || UIUtil.isMinimized(w) || AppUIUtil.isInFullscreen(w)) return; + if (!w.isVisible() || ComponentUtil.isMinimized(w) || AppUIUtil.isInFullscreen(w)) return; if (!IdeEventQueue.getInstance().isTheCurrentWindowOnTheActivatedList(w)) return; Window window = mapWindow.fun(w); Component recentFocusOwner = window.getMostRecentFocusOwner(); diff --git a/platform/platform-api/src/com/intellij/openapi/wm/IdeFrame.java b/platform/platform-api/src/com/intellij/openapi/wm/IdeFrame.java index b5c8ca385cef..3f0b93379cb0 100644 --- a/platform/platform-api/src/com/intellij/openapi/wm/IdeFrame.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/IdeFrame.java @@ -27,6 +27,10 @@ public interface IdeFrame { @Nullable BalloonLayout getBalloonLayout(); + default boolean isInFullScreen() { + return false; + } + interface Child extends IdeFrame { } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java index ad3740a0045c..b47836a3516a 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java @@ -31,7 +31,6 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.IdeFrameEx; import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.openapi.wm.impl.FocusManagerImpl; import com.intellij.ui.AppUIUtil; @@ -88,7 +87,7 @@ public final class IdeEventQueue extends EventQueue { public static void updateActivatedWindowSet() { for (Iterator iter = activatedWindows.iterator(); iter.hasNext(); ) { Window window = iter.next(); - if (!window.isVisible() || UIUtil.isMinimized(window) || AppUIUtil.isInFullscreen(window)) { + if (!window.isVisible() || ComponentUtil.isMinimized(window) || AppUIUtil.isInFullscreen(window)) { iter.remove(); } } diff --git a/platform/platform-impl/src/com/intellij/ide/IdePopupManager.java b/platform/platform-impl/src/com/intellij/ide/IdePopupManager.java index 786f1c5c0f92..aae5348eabef 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdePopupManager.java +++ b/platform/platform-impl/src/com/intellij/ide/IdePopupManager.java @@ -7,7 +7,7 @@ import com.intellij.openapi.ui.popup.IdePopupEventDispatcher; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.wm.ex.IdeFrameEx; +import com.intellij.openapi.wm.IdeFrame; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -57,8 +57,8 @@ public final class IdePopupManager implements IdeEventQueue.EventDispatcher { shouldCloseAllPopup = true; } - if (!shouldCloseAllPopup && ultimateParentForEventWindow instanceof IdeFrameEx) { - IdeFrameEx ultimateParentWindowForEvent = (IdeFrameEx)ultimateParentForEventWindow; + if (!shouldCloseAllPopup && ultimateParentForEventWindow instanceof IdeFrame) { + IdeFrame ultimateParentWindowForEvent = (IdeFrame)ultimateParentForEventWindow; if (ultimateParentWindowForEvent.isInFullScreen() && !ultimateParentForFocusedComponent.equals(ultimateParentForEventWindow)) { shouldCloseAllPopup = true; diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFrameEx.java b/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFrameEx.java index 469ab9d29269..a7a9b80cf433 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFrameEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/ex/IdeFrameEx.java @@ -14,8 +14,6 @@ import java.io.File; public interface IdeFrameEx extends IdeFrame { void setFileTitle(String fileTitle, File ioFile); - boolean isInFullScreen(); - @NotNull Promise toggleFullScreen(boolean state); 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 ddf1f8029d73..1bd90b20c410 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 @@ -135,6 +135,7 @@ public final class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider return (SystemInfo.isMac && isInFullScreen()) ? JBUI.emptyInsets() : super.getInsets(); } + @Override public boolean isInFullScreen() { return myFrameDecorator != null && myFrameDecorator.isInFullScreen(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java index d9e825ecaf5b..18942bd6fe3f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java @@ -19,7 +19,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.IdeFrame; -import com.intellij.openapi.wm.ex.IdeFrameEx; import com.intellij.openapi.wm.impl.status.ClockPanel; import com.intellij.ui.ColorUtil; import com.intellij.ui.Gray; @@ -197,8 +196,8 @@ public class IdeMenuBar extends JMenuBar implements IdeEventQueue.EventDispatche private void updateState() { if (myAnimator != null) { Window window = SwingUtilities.getWindowAncestor(this); - if (window instanceof IdeFrameEx) { - boolean fullScreen = ((IdeFrameEx)window).isInFullScreen(); + if (window instanceof IdeFrame) { + boolean fullScreen = ((IdeFrame)window).isInFullScreen(); if (fullScreen) { setState(State.COLLAPSING); restartAnimator(); @@ -602,9 +601,9 @@ public class IdeMenuBar extends JMenuBar implements IdeEventQueue.EventDispatche private MyExitFullScreenButton() { setFocusable(false); addActionListener(e -> { - Window window = SwingUtilities.getWindowAncestor(this); - if (window instanceof IdeFrameEx) { - ((IdeFrameEx)window).toggleFullScreen(false); + ProjectFrameHelper frameHelper = ProjectFrameHelper.getFrameHelper(SwingUtilities.getWindowAncestor(this)); + if (frameHelper != null) { + frameHelper.toggleFullScreen(false); } }); addMouseListener(new MouseAdapter() { diff --git a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java index b612ca1d42ae..346eef3b288c 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java @@ -25,8 +25,8 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.ex.IdeFrameEx; import com.intellij.ui.AppIcon.MacAppIcon; import com.intellij.ui.components.JBScrollPane; import com.intellij.ui.scale.JBUIScale; @@ -601,9 +601,7 @@ public final class AppUIUtil { AWTAccessor.getComponentAccessor().setGraphicsConfiguration(comp, gc); } - public static boolean isInFullscreen (Window window) { - if (!(window instanceof IdeFrameEx)) return false; - IdeFrameEx ideFrameEx = (IdeFrameEx) window; - return ideFrameEx.isInFullScreen(); + public static boolean isInFullscreen(@Nullable Window window) { + return window instanceof IdeFrame && ((IdeFrame)window).isInFullScreen(); } } \ No newline at end of file diff --git a/platform/util/ui/src/com/intellij/ui/ComponentUtil.java b/platform/util/ui/src/com/intellij/ui/ComponentUtil.java index eb2373e0c4f4..e4928c63f3fd 100644 --- a/platform/util/ui/src/com/intellij/ui/ComponentUtil.java +++ b/platform/util/ui/src/com/intellij/ui/ComponentUtil.java @@ -10,6 +10,15 @@ import java.awt.*; import java.util.function.Predicate; public final class ComponentUtil { + public static boolean isMinimized(@Nullable Window window) { + if (!(window instanceof Frame)) { + return false; + } + + Frame frame = (Frame)window; + return frame.getExtendedState() == Frame.ICONIFIED; + } + @NotNull public static Component findUltimateParent(@NotNull Component c) { Component eachParent = c; diff --git a/platform/util/ui/src/com/intellij/util/ui/UIUtil.java b/platform/util/ui/src/com/intellij/util/ui/UIUtil.java index f08631042e17..9a27b1d94b56 100644 --- a/platform/util/ui/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/ui/src/com/intellij/util/ui/UIUtil.java @@ -262,12 +262,6 @@ public final class UIUtil extends StartupUiUtil { return GrayFilter.namedFilter("text.grayFilter", new GrayFilter(20, 0, 100)); } - public static boolean isMinimized(Window window) { - if (!(window instanceof Frame)) return false; - Frame frame = (Frame)window; - return frame.getExtendedState() == Frame.ICONIFIED; - } - @ApiStatus.Experimental public static class GrayFilter extends RGBImageFilter { private float brightness;