git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5138 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v1.3.90
@@ -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"); |
@@ -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"); | |||
} | |||
} | |||
@@ -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", |