From e33a5f4861a6538456f13f3feec03b88005d5073 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 7 Jun 2024 17:29:19 +0400 Subject: [PATCH] GUI: fixed app freeze on images download or connection for systems like macOS (related to #12261); --- Mage.Client/src/main/java/mage/client/MageFrame.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 23ae98f4e27..8d3e8c8d7f0 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -107,6 +107,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { private final ErrorDialog errorDialog; private static CallbackClient callbackClient; private static final Preferences PREFS = Preferences.userNodeForPackage(MageFrame.class); + private final JPanel fakeTopPanel; private JLabel title; private Rectangle titleRectangle; private static final MageVersion VERSION = new MageVersion(MageFrame.class); @@ -332,8 +333,16 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { setAppIcon(); MageTray.instance.install(); + // transparent top panel to fix swing bugs with other panel drawing and events processing on some systems like macOS + fakeTopPanel = new JPanel(); + fakeTopPanel.setVisible(true); + fakeTopPanel.setOpaque(false); + fakeTopPanel.setLayout(null); + desktopPane.add(fakeTopPanel, JLayeredPane.DRAG_LAYER); + desktopPane.add(ArrowBuilder.getBuilder().getArrowsManagerPanel(), JLayeredPane.PALETTE_LAYER); + desktopPane.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { @@ -347,6 +356,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { updateCurrentFrameSize(); ArrowBuilder.getBuilder().setSize(width, height); + fakeTopPanel.setSize(width, height); if (title != null) { title.setBounds((int) (width - titleRectangle.getWidth()) / 2, (int) (height - titleRectangle.getHeight()) / 2, titleRectangle.width, titleRectangle.height);