Code cleanups in PollingManager.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@475 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/x0vncserver/PollingManager.cxx b/x0vncserver/PollingManager.cxx
index 84a7435..c02e509 100644
--- a/x0vncserver/PollingManager.cxx
+++ b/x0vncserver/PollingManager.cxx
@@ -127,27 +127,32 @@
 
 void PollingManager::poll()
 {
+  bool someChanges = false;
+
   switch((int)pollingType) {
   case 0:
-    poll_Dumb();
+    someChanges = poll_Dumb();
     break;
   case 1:
-    poll_Traditional();
+    someChanges = poll_Traditional();
     break;
   case 2:
-    poll_SkipCycles();
+    someChanges = poll_SkipCycles();
     break;
 //case 3:
   default:
-    poll_DetectVideo();
+    someChanges = poll_DetectVideo();
     break;
   }
+
+  if (someChanges)
+    m_server->tryUpdate();
 }
 
-void PollingManager::poll_DetectVideo()
+bool PollingManager::poll_DetectVideo()
 {
   if (!m_server)
-    return;
+    return false;
 
   const int GRAND_STEP_DIVISOR = 8;
   const int VIDEO_THRESHOLD_0 = 3;
@@ -209,14 +214,13 @@
     }
   }
 
-  if (nTilesChanged)
-    m_server->tryUpdate();
+  return (nTilesChanged != 0);
 }
 
-void PollingManager::poll_SkipCycles()
+bool PollingManager::poll_SkipCycles()
 {
   if (!m_server)
-    return;
+    return false;
 
   enum {
     NOT_CHANGED, CHANGED_ONCE, CHANGED_AGAIN
@@ -274,14 +278,13 @@
     }
   }
 
-  if (nTilesChanged)
-    m_server->tryUpdate();
+  return (nTilesChanged != 0);
 }
 
-void PollingManager::poll_Traditional()
+bool PollingManager::poll_Traditional()
 {
   if (!m_server)
-    return;
+    return false;
 
   int nTilesChanged = 0;
   int scanLine = m_pollingOrder[m_pollingStep++ % 32];
@@ -317,16 +320,23 @@
     }
   }
 
-  if (nTilesChanged)
-    m_server->tryUpdate();
+  return (nTilesChanged != 0);
 }
 
-void PollingManager::poll_Dumb()
+//
+// Simplest polling method, from the original x0vncserver of VNC4.
+//
+
+bool PollingManager::poll_Dumb()
 {
-  if (m_server) {
-    m_image->get(DefaultRootWindow(m_dpy));
-    Rect rect(0, 0, m_width, m_height);
-    m_server->add_changed(rect);
-    m_server->tryUpdate();
-  }
+  if (!m_server)
+    return false;
+
+  m_image->get(DefaultRootWindow(m_dpy));
+  Rect rect(0, 0, m_width, m_height);
+  m_server->add_changed(rect);
+
+  // As we have no idea if any pixels were changed,
+  // always report that some changes have been detected.
+  return true;
 }
diff --git a/x0vncserver/PollingManager.h b/x0vncserver/PollingManager.h
index 59eb22e..253c237 100644
--- a/x0vncserver/PollingManager.h
+++ b/x0vncserver/PollingManager.h
@@ -43,10 +43,14 @@
 
 protected:
 
-  void poll_DetectVideo();
-  void poll_SkipCycles();
-  void poll_Traditional();
-  void poll_Dumb();
+  //
+  // Implementations of different polling algorithms.
+  // Return value of true reports that some changes were detected.
+  //
+  bool poll_DetectVideo();
+  bool poll_SkipCycles();
+  bool poll_Traditional();
+  bool poll_Dumb();
 
   Display *m_dpy;
   VNCServer *m_server;