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);
+}
diff --git a/vncviewer/CConn.h b/vncviewer/CConn.h
index 1b92937..06e3040 100644
--- a/vncviewer/CConn.h
+++ b/vncviewer/CConn.h
@@ -81,6 +81,8 @@
static void handleOptions(void *data);
+ static void handleUpdateTimeout(void *data);
+
private:
char* serverHost;
int serverPort;
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 4bd0758..ee74e9d 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -170,7 +170,6 @@
// Copy the areas of the framebuffer that have been changed (damaged)
// to the displayed window.
-// FIXME: Make sure this gets called on slow updates
void Viewport::updateWindow()
{