From b3f2c7d08178aa45c5687cac338d65db5d92d01c Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Wed, 3 Oct 2001 17:09:55 +0000
Subject: java viewer bug fixed

---
 TODO        | 8 +++++---
 rfbserver.c | 6 ++++--
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/TODO b/TODO
index 17ffe48..f17d3f0 100644
--- a/TODO
+++ b/TODO
@@ -1,24 +1,26 @@
 immediate:
 ----------
 
-fix bug in http (java) client with big endian server: byte swapping is broken
 udp
 documentation
 	perhaps the option (or just hint) not to mark very tiny regions as
 	modified, because that is inefficient for the encodings.
 optionally dont draw rich cursors as xcursors
+cursor smears on IRIX with pthreads, then has bus error.
 
 later:
 ------
 
 autoconf? at least Sun Solaris and Windows compilation
 CORBA
-cursor "smears" sometimes when not using cursor encoding
-	(seems to be gone now; haven't debugged properly, though)
 
 done:
 -----
 
+.fix bug in http (java) client with big endian server: byte swapping is broken
+	(was a cursorshape which was sent too soon; java vncviewer assumes
+	a rich cursor shape to be always 1 byte per pixel, however, framebuffer
+	updates before setting the pixel format can be server format)
 .rfbConnect, ConnectToTcpAddr
 .update to newest TridiaVNC version (1.2.1).
 .adapt rdp2vnc (rdesktop)
diff --git a/rfbserver.c b/rfbserver.c
index f43ceac..ef7eced 100644
--- a/rfbserver.c
+++ b/rfbserver.c
@@ -849,6 +849,7 @@ rfbSendFramebufferUpdate(cl, givenUpdateRegion)
     Bool sendCursorShape = FALSE;
     Bool cursorWasDrawn = FALSE;
 
+    
     /*
      * If this client understands cursor shape updates, cursor should be
      * removed from the framebuffer. Otherwise, make sure it's put up.
@@ -860,8 +861,9 @@ rfbSendFramebufferUpdate(cl, givenUpdateRegion)
       if (cl->screen->cursorIsDrawn) {
 	rfbUndrawCursor(cl);
       }
-      if (!cl->screen->cursorIsDrawn && cl->cursorWasChanged)
-	sendCursorShape = TRUE;
+      if (!cl->screen->cursorIsDrawn && cl->cursorWasChanged &&
+	  cl->readyForSetColourMapEntries)
+	  sendCursorShape = TRUE;
     } else {
       if (!cl->screen->cursorIsDrawn) {
 	rfbDrawCursor(cl);
-- 
cgit v1.2.3

