From eccbb1e804bb0e6a55986d05b9a8764ba55888e8 Mon Sep 17 00:00:00 2001 From: Kyle <48519776+xKylee@users.noreply.github.com> Date: Sat, 8 Feb 2020 22:37:00 +0000 Subject: [PATCH] clientui: client focus add back --- .../java/net/runelite/client/ui/ClientUI.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 5ee14960bd..d6d10e7dce 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -612,6 +612,35 @@ public class ClientUI { OSXUtil.requestFocus(); } + + // The workaround for Windows is to minimise and then un-minimise the client to bring + // it to the front because java.awt.Window#toFront doesn't work reliably. + // See https://stackoverflow.com/questions/309023/how-to-bring-a-window-to-the-front/7435722#7435722 + else if (OSType.getOSType() == OSType.Windows && !frame.isFocused()) + { + SwingUtilities.invokeLater(() -> + { + if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH) + { + frame.setExtendedState(JFrame.ICONIFIED); + frame.setExtendedState(JFrame.MAXIMIZED_BOTH); + } + else + { + // If the client is snapped to the top and bottom edges of the screen, setExtendedState will + // will reset it so setSize and setLocation ensure that the client doesn't move or resize. + // It is done this way because Windows does not support JFrame.MAXIMIZED_VERT + int x = frame.getLocation().x; + int y = frame.getLocation().y; + int width = frame.getWidth(); + int height = frame.getHeight(); + frame.setExtendedState(JFrame.ICONIFIED); + frame.setExtendedState(JFrame.NORMAL); + frame.setLocation(x, y); + frame.setSize(width, height); + } + }); + } frame.requestFocus(); giveClientFocus();