Index: trunk/vnc/vnc_javasrc/ButtonPanel.java
===================================================================
--- trunk/vnc/vnc_javasrc/ButtonPanel.java	(revision 127)
+++ trunk/vnc/vnc_javasrc/ButtonPanel.java	(revision 128)
@@ -28,5 +28,5 @@
 import java.io.*;
 
-class ButtonPanel extends Panel implements ActionListener {
+class ButtonPanel extends Panel implements ActionListener, ItemListener {
 
   VncViewer viewer;
@@ -37,4 +37,6 @@
   Button ctrlAltDelButton;
   Button refreshButton;
+  Checkbox altCheckbox;
+  Checkbox ctrlCheckbox;
 
   ButtonPanel(VncViewer v) {
@@ -66,4 +68,13 @@
     add(refreshButton);
     refreshButton.addActionListener(this);
+    
+    altCheckbox = new Checkbox("Alt");
+    altCheckbox.setEnabled(false);
+    add(altCheckbox);
+    altCheckbox.addItemListener(this);
+    ctrlCheckbox = new Checkbox("Control");
+    ctrlCheckbox.setEnabled(false);
+    add(ctrlCheckbox);
+    ctrlCheckbox.addItemListener(this);
   }
 
@@ -104,4 +115,6 @@
   public void enableRemoteAccessControls(boolean enable) {
     ctrlAltDelButton.setEnabled(enable);
+    ctrlCheckbox.setEnabled(enable);
+    altCheckbox.setEnabled(enable);
   }
 
@@ -151,4 +164,12 @@
     }
   }
+    public void itemStateChanged(ItemEvent evt) {
+	viewer.moveFocusToDesktop();
+	int state = evt.getStateChange();
+	int extraModifiers = 0;
+	if (altCheckbox.getState()) { extraModifiers |= InputEvent.ALT_MASK; }
+	if (ctrlCheckbox.getState()) { extraModifiers |= InputEvent.CTRL_MASK; }
+	viewer.vc.extraModifiers = extraModifiers;
+    }
 }
 
Index: trunk/vnc/vnc_javasrc/VncCanvas.java
===================================================================
--- trunk/vnc/vnc_javasrc/VncCanvas.java	(revision 127)
+++ trunk/vnc/vnc_javasrc/VncCanvas.java	(revision 128)
@@ -80,4 +80,5 @@
   // True if we process keyboard and mouse events.
   boolean inputEnabled;
+  int extraModifiers = 0;
 
   //
@@ -1511,4 +1512,7 @@
 	synchronized(rfb) {
 	  try {
+	    if (extraModifiers != 0) {
+	      evt.setModifiers(evt.getModifiers() | extraModifiers);
+	    }
 	    rfb.writeKeyEvent(evt);
 	  } catch (Exception e) {
