1 --- vnc_javasrc.orig/VncCanvas.java 2004-10-10 02:15:54.000000000 -0400 2 +++ vnc_javasrc/VncCanvas.java 2010-11-30 21:01:15.000000000 -0500 3 @@ -28,13 +28,14 @@ 4 import java.lang.*; 5 import java.util.zip.*; 6 7 +import java.util.Collections; 8 9 // 10 // VncCanvas is a subclass of Canvas which draws a VNC desktop on it. 11 // 12 13 class VncCanvas extends Canvas 14 - implements KeyListener, MouseListener, MouseMotionListener { 15 + implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener { 16 17 VncViewer viewer; 18 RfbProto rfb; 19 @@ -81,6 +82,20 @@ 20 cm8 = new DirectColorModel(8, 7, (7 << 3), (3 << 6)); 21 cm24 = new DirectColorModel(24, 0xFF0000, 0x00FF00, 0x0000FF); 22 23 + // kludge to not show any Java cursor in the canvas since we are 24 + // showing the soft cursor (should be a user setting...) 25 + Cursor dot = Toolkit.getDefaultToolkit().createCustomCursor( 26 + Toolkit.getDefaultToolkit().createImage(new byte[4]), new Point(0,0), 27 + "dot"); 28 + this.setCursor(dot); 29 + 30 + // while we are at it... get rid of the keyboard traversals that 31 + // make it so we can't type a Tab character: 32 + this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, 33 + Collections.EMPTY_SET); 34 + this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, 35 + Collections.EMPTY_SET); 36 + 37 colors = new Color[256]; 38 for (int i = 0; i < 256; i++) 39 colors[i] = new Color(cm8.getRGB(i)); 40 @@ -169,6 +184,7 @@ 41 inputEnabled = true; 42 addMouseListener(this); 43 addMouseMotionListener(this); 44 + addMouseWheelListener(this); 45 if (viewer.showControls) { 46 viewer.buttonPanel.enableRemoteAccessControls(true); 47 } 48 @@ -177,6 +193,7 @@ 49 inputEnabled = false; 50 removeMouseListener(this); 51 removeMouseMotionListener(this); 52 + removeMouseWheelListener(this); 53 if (viewer.showControls) { 54 viewer.buttonPanel.enableRemoteAccessControls(false); 55 } 56 @@ -1190,6 +1207,9 @@ 57 public void mouseDragged(MouseEvent evt) { 58 processLocalMouseEvent(evt, true); 59 } 60 + public void mouseWheelMoved(MouseWheelEvent evt) { 61 + processLocalMouseWheelEvent(evt); 62 + } 63 64 public void processLocalKeyEvent(KeyEvent evt) { 65 if (viewer.rfb != null && rfb.inNormalProtocol) { 66 @@ -1221,6 +1241,19 @@ 67 evt.consume(); 68 } 69 70 + public void processLocalMouseWheelEvent(MouseWheelEvent evt) { 71 + if (viewer.rfb != null && rfb.inNormalProtocol) { 72 + synchronized(rfb) { 73 + try { 74 + rfb.writeWheelEvent(evt); 75 + } catch (Exception e) { 76 + e.printStackTrace(); 77 + } 78 + rfb.notify(); 79 + } 80 + } 81 + } 82 + 83 public void processLocalMouseEvent(MouseEvent evt, boolean moved) { 84 if (viewer.rfb != null && rfb.inNormalProtocol) { 85 if (moved) { 86 @@ -1387,9 +1420,9 @@ 87 result = cm8.getRGB(pixBuf[i]); 88 } else { 89 result = 0xFF000000 | 90 - (pixBuf[i * 4 + 1] & 0xFF) << 16 | 91 - (pixBuf[i * 4 + 2] & 0xFF) << 8 | 92 - (pixBuf[i * 4 + 3] & 0xFF); 93 + (pixBuf[i * 4 + 2] & 0xFF) << 16 | 94 + (pixBuf[i * 4 + 1] & 0xFF) << 8 | 95 + (pixBuf[i * 4 + 0] & 0xFF); 96 } 97 } else { 98 result = 0; // Transparent pixel 99 @@ -1403,9 +1436,9 @@ 100 result = cm8.getRGB(pixBuf[i]); 101 } else { 102 result = 0xFF000000 | 103 - (pixBuf[i * 4 + 1] & 0xFF) << 16 | 104 - (pixBuf[i * 4 + 2] & 0xFF) << 8 | 105 - (pixBuf[i * 4 + 3] & 0xFF); 106 + (pixBuf[i * 4 + 2] & 0xFF) << 16 | 107 + (pixBuf[i * 4 + 1] & 0xFF) << 8 | 108 + (pixBuf[i * 4 + 0] & 0xFF); 109 } 110 } else { 111 result = 0; // Transparent pixel 112