From 8f1d0bc9dc9209f6468efe83028aaffcd1a698db Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Mon, 16 Sep 2024 15:48:05 +0100 Subject: [PATCH 1/2] Attempt to optimise empty clipboard checks --- .../enigma/gui/elements/EditorPopupMenu.java | 2 +- .../java/cuchaz/enigma/gui/util/GuiUtil.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorPopupMenu.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorPopupMenu.java index dd37798a0..816239556 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorPopupMenu.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorPopupMenu.java @@ -165,7 +165,7 @@ public void updateUiState() { EditableType type = EditableType.fromEntry(referenceEntry); this.renameItem.setEnabled(isRenamable && (type != null && this.gui.isEditable(type))); - this.pasteItem.setEnabled(isRenamable && (type != null && this.gui.isEditable(type)) && !GuiUtil.getClipboard().equals("")); + this.pasteItem.setEnabled(isRenamable && (type != null && this.gui.isEditable(type)) && GuiUtil.hasClipboardText()); this.editJavadocItem.setEnabled(isRenamable && this.gui.isEditable(EditableType.JAVADOC)); this.showInheritanceItem.setEnabled(isClassEntry || isMethodEntry || isConstructorEntry); this.showImplementationsItem.setEnabled(isClassEntry || isMethodEntry); diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java index 106859ccb..37851fa92 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java @@ -5,7 +5,9 @@ import java.awt.Desktop; import java.awt.Font; import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -87,7 +89,22 @@ public static void copyToClipboard(String text) { Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(text), null); } + public static boolean hasClipboardText() { + Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + Transferable contents = systemClipboard.getContents(null); + + if (contents != null) { + return contents.isDataFlavorSupported(DataFlavor.stringFlavor); + } + + return false; + } + public static String getClipboard() { + if (!hasClipboardText()) { + return ""; + } + try { return (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException | IOException e) { From d8197975dc4e0ff547a253f9a65dfbe1d8a3d465 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sat, 28 Sep 2024 14:08:48 +0100 Subject: [PATCH 2/2] Add ENIGMA_DISABLE_CLIPBOARD env var --- .../src/main/java/cuchaz/enigma/gui/util/GuiUtil.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java index 37851fa92..c68a3b167 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java @@ -57,6 +57,8 @@ public class GuiUtil { public static final Icon FIELD_ICON = loadIcon("field"); public static final Icon CONSTRUCTOR_ICON = loadIcon("constructor"); + private static final boolean DISABLE_CLIPBOARD = System.getenv("ENIGMA_DISABLE_CLIPBOARD") != null; + public static void openUrl(String url) { try { switch (Os.getOs()) { @@ -90,6 +92,10 @@ public static void copyToClipboard(String text) { } public static boolean hasClipboardText() { + if (DISABLE_CLIPBOARD) { + return false; + } + Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable contents = systemClipboard.getContents(null);