diff options
-rw-r--r-- | java/com/tigervnc/vncviewer/ClipboardDialog.java | 24 | ||||
-rw-r--r-- | java/com/tigervnc/vncviewer/DesktopWindow.java | 31 | ||||
-rw-r--r-- | java/com/tigervnc/vncviewer/VncViewer.java | 4 |
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", |