summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/com/tigervnc/vncviewer/ClipboardDialog.java24
-rw-r--r--java/com/tigervnc/vncviewer/DesktopWindow.java31
-rw-r--r--java/com/tigervnc/vncviewer/VncViewer.java4
3 files changed, 30 insertions, 29 deletions
diff --git a/java/com/tigervnc/vncviewer/ClipboardDialog.java b/java/com/tigervnc/vncviewer/ClipboardDialog.java
index d6e2525c..2c9b7d0f 100644
--- a/java/com/tigervnc/vncviewer/ClipboardDialog.java
+++ b/java/com/tigervnc/vncviewer/ClipboardDialog.java
@@ -57,15 +57,12 @@ class ClipboardDialog extends Dialog implements ActionListener {
pack();
}
- public void initDialog() {
- textArea.setText(current);
- textArea.selectAll();
- }
-
public void setContents(String str) {
- current = str;
textArea.setText(str);
- textArea.selectAll();
+ }
+
+ public String getContents() {
+ return textArea.getText();
}
public void serverCutText(String str, int len) {
@@ -77,13 +74,13 @@ class ClipboardDialog extends Dialog implements ActionListener {
if (cb != null) {
StringSelection ss = new StringSelection(str);
try {
- cb.setContents(ss, ss);
+ cb.setContents(ss, null);
} catch(Exception e) {
- vlog.debug(e.toString());
+ vlog.debug(e.getMessage());
}
}
} catch(SecurityException e) {
- System.err.println("Cannot access the system clipboard");
+ vlog.debug("Cannot access the system clipboard: "+e.getMessage());
}
}
@@ -94,11 +91,9 @@ class ClipboardDialog extends Dialog implements ActionListener {
public void actionPerformed(ActionEvent e) {
Object s = e.getSource();
if (s instanceof JButton && (JButton)s == clearButton) {
- current = "";
- textArea.setText(current);
+ serverCutText(new String(""), 0);
} else if (s instanceof JButton && (JButton)s == sendButton) {
- current = textArea.getText();
- cc.writeClientCutText(current, current.length());
+ cc.writeClientCutText(textArea.getText(), textArea.getText().length());
endDialog();
} else if (s instanceof JButton && (JButton)s == cancelButton) {
endDialog();
@@ -106,7 +101,6 @@ class ClipboardDialog extends Dialog implements ActionListener {
}
CConn cc;
- String current;
JTextArea textArea;
JButton clearButton, sendButton, cancelButton;
static LogWriter vlog = new LogWriter("ClipboardDialog");
diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java
index 3657b03a..e1d242a6 100644
--- a/java/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/com/tigervnc/vncviewer/DesktopWindow.java
@@ -357,30 +357,33 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener,
g2.dispose();
}
- String oldContents = "";
-
public synchronized void checkClipboard() {
SecurityManager sm = System.getSecurityManager();
try {
if (sm != null) sm.checkSystemClipboardAccess();
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
- if (cb != null && cc.viewer.sendClipboard.getValue()) {
- Transferable t = cb.getContents(null);
- if ((t != null) && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
- try {
- String newContents = (String)t.getTransferData(DataFlavor.stringFlavor);
- if (newContents != null && !newContents.equals(oldContents)) {
+ if (cb == null) return;
+ Transferable t = cb.getContents(null);
+ if ((t != null) && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
+ try {
+ String newContents = new String("");
+ if (t.getTransferData(DataFlavor.stringFlavor) != null) {
+ int len = Math.min(cc.viewer.maxCutText.getValue(),
+ ((String)t.getTransferData(DataFlavor.stringFlavor)).length());
+ newContents =
+ ((String)t.getTransferData(DataFlavor.stringFlavor)).substring(0, len);
+ }
+ if (!newContents.equals(cc.clipboardDialog.getContents())) {
+ if (cc.viewer.sendClipboard.getValue())
cc.writeClientCutText(newContents, newContents.length());
- oldContents = newContents;
- cc.clipboardDialog.setContents(newContents);
- }
- } catch(java.lang.Exception e) {
- System.out.println("Exception getting clipboard data: " + e.getMessage());
+ cc.clipboardDialog.setContents(newContents);
}
+ } catch(java.lang.Exception e) {
+ vlog.debug("Exception getting clipboard data: " + e.getMessage());
}
}
} catch(SecurityException e) {
- System.err.println("Cannot access the system clipboard");
+ vlog.debug("Cannot access the system clipboard");
}
}
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index 9a015cfb..89bc94ed 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -460,6 +460,10 @@ public class VncViewer extends java.applet.Applet implements Runnable
= new BoolParameter("SendClipboard",
"Send clipboard changes to the server",
true);
+ IntParameter maxCutText
+ = new IntParameter("MaxCutText",
+ "Maximum permitted length of an outgoing clipboard update",
+ 262144);
StringParameter menuKey
= new StringParameter("MenuKey",
"The key which brings up the popup menu",