changeset 1982:0f59713aeaeb

fix copy and paste
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 27 Jun 2025 22:27:40 -0600
parents ad312de2a30e
children 4d4ef7341829
files src/luan/modules/swing/TextAreaLuan.java
diffstat 1 files changed, 38 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
diff -r ad312de2a30e -r 0f59713aeaeb src/luan/modules/swing/TextAreaLuan.java
--- a/src/luan/modules/swing/TextAreaLuan.java	Fri Jun 27 19:51:12 2025 -0600
+++ b/src/luan/modules/swing/TextAreaLuan.java	Fri Jun 27 22:27:40 2025 -0600
@@ -1,5 +1,6 @@
 package luan.modules.swing;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Collections;
 import java.awt.Rectangle;
@@ -7,11 +8,16 @@
 import java.awt.Color;
 import java.awt.Shape;
 import java.awt.Point;
+import java.awt.Toolkit;
 import java.awt.event.FocusListener;
 import java.awt.event.FocusEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 import java.awt.event.MouseEvent;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.UnsupportedFlavorException;
 import javax.swing.JTextArea;
 import javax.swing.UIManager;
 import javax.swing.Timer;
@@ -369,4 +375,36 @@
 			undo.endTransaction();
 		}
 	}
+
+	static void putInClipboard(String s) {
+		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(s),null);
+	}
+
+	@Override public void copy() {
+		String s = getSelectedText();
+		if( s != null )
+			putInClipboard(s);
+	}
+
+	@Override public void cut() {
+		String s = getSelectedText();
+		if( s!=null && isEditable() && isEnabled() ) {
+			putInClipboard(s);
+			replaceSelection("");
+		}
+	}
+
+	@Override public void paste() {
+		try {
+			if( isEditable() && isEnabled() ) {
+				Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+				if( clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor) ) {
+					String s = (String)clipboard.getData(DataFlavor.stringFlavor);
+					replaceSelection(s);
+				}
+			}
+		} catch(UnsupportedFlavorException | IOException e) {
+			throw new RuntimeException(e);
+		}
+	}
 }