Display partial updates on slow transfers

Normally we only display screen changes once we have the updates for
the entire screen. This may give the impression that the viewer is
hung though. So display the partial data if the update is taking to
long to arrive.
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index f8b45af..2acb373 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -133,6 +133,7 @@
 CConn::~CConn()
 {
   OptionsDialog::removeCallback(handleOptions);
+  Fl::remove_timeout(handleUpdateTimeout, this);
 
   for (size_t i = 0; i < sizeof(decoders)/sizeof(decoders[0]); i++)
     delete decoders[i];
@@ -344,6 +345,9 @@
   pendingUpdate = false;
 
   requestNewUpdate();
+
+  // Update the screen prematurely for very slow updates
+  Fl::add_timeout(1.0, handleUpdateTimeout, this);
 }
 
 // framebufferUpdateEnd() is called at the end of an update.
@@ -352,6 +356,7 @@
 // appropriately, and then request another incremental update.
 void CConn::framebufferUpdateEnd()
 {
+  Fl::remove_timeout(handleUpdateTimeout, this);
   desktop->updateWindow();
 
   if (firstUpdate) {
@@ -692,3 +697,14 @@
       self->requestNewUpdate();
   }
 }
+
+void CConn::handleUpdateTimeout(void *data)
+{
+  CConn *self = (CConn *)data;
+
+  assert(self);
+
+  self->desktop->updateWindow();
+
+  Fl::repeat_timeout(1.0, handleUpdateTimeout, data);
+}