GUI: fixed memory leak on gui-desktop

This commit is contained in:
Hans Mackowiak
2020-12-03 10:44:20 +01:00
parent 772b0c4eae
commit ecb010ed41
5 changed files with 37 additions and 29 deletions

View File

@@ -134,6 +134,7 @@ import forge.util.gui.SOptionPane;
import forge.view.FView;
import forge.view.arcane.CardPanel;
import forge.view.arcane.FloatingZone;
import net.miginfocom.layout.LinkHandler;
import net.miginfocom.swing.MigLayout;
/**
@@ -1028,6 +1029,7 @@ public final class CMatchUI
FThreads.invokeInEdtNowOrLater(new Runnable() {
@Override public void run() {
Singletons.getView().getNavigationBar().closeTab(screen);
LinkHandler.clearWeakReferencesNow();
}
});
}

View File

@@ -2214,7 +2214,7 @@ public class FSkin {
}
private static class SkinScrollBarUI extends BasicScrollBarUI implements ILocalRepaint {
@SuppressWarnings("serial")
private static JButton hiddenButton = new JButton() {
private static class HiddenButton extends JButton {
@Override
public Dimension getPreferredSize() {
return new Dimension(0, 0);
@@ -2229,26 +2229,42 @@ public class FSkin {
private final boolean vertical;
private boolean hovered;
private MouseAdapter hoverListener;
private static class SkinScrollBarListener extends MouseAdapter {
private SkinScrollBarUI barUI;
private SkinScrollBarListener(SkinScrollBarUI barUI) {
this.barUI = barUI;
}
@Override
public void mouseEntered(final MouseEvent e) {
barUI.hovered = true;
barUI.repaintSelf();
}
@Override
public void mouseExited(final MouseEvent e) {
barUI.hovered = false;
barUI.repaintSelf();
}
}
private SkinScrollBarUI(final JScrollBar scrollbar, final boolean vertical0) {
vertical = vertical0;
scrollbar.setOpaque(false);
scrollbar.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(final MouseEvent e) {
hovered = true;
repaintSelf();
}
@Override
public void mouseExited(final MouseEvent e) {
hovered = false;
repaintSelf();
}
});
hoverListener = new SkinScrollBarListener(this);
scrollbar.setOpaque(false);
scrollbar.addMouseListener(hoverListener);
scrollbar.setUI(this);
}
protected void uninstallListeners() {
super.uninstallListeners();
scrollbar.removeMouseListener(hoverListener);
}
@Override
public void repaintSelf() {
final Dimension d = scrollbar.getSize();
@@ -2257,12 +2273,12 @@ public class FSkin {
@Override
protected JButton createIncreaseButton(final int orientation) {
return hiddenButton; //hide increase button
return new HiddenButton(); //hide increase button
}
@Override
protected JButton createDecreaseButton(final int orientation) {
return hiddenButton; //hide decrease button
return new HiddenButton(); //hide decrease button
}
@Override