Code refactoring: maintaining the Image object representing the framebuffer
in XPixelBuffer instead of XDesktop.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2572 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx
index 9331cf5..f2ff430 100644
--- a/unix/x0vncserver/x0vncserver.cxx
+++ b/unix/x0vncserver/x0vncserver.cxx
@@ -138,7 +138,7 @@
 {
 public:
   XDesktop(Display* dpy_, Geometry *geometry_)
-    : dpy(dpy_), geometry(geometry_), pb(0), server(0), image(0), pollmgr(0),
+    : dpy(dpy_), geometry(geometry_), pb(0), server(0), pollmgr(0),
       oldButtonMask(0), haveXtest(false), maxButtons(0), running(false)
   {
 #ifdef HAVE_XTEST
@@ -175,15 +175,17 @@
     vlog.info("Enabling %d button%s of X pointer device",
               maxButtons, (maxButtons != 1) ? "s" : "");
 
-    // Create an image for maintaining framebuffer data.
+    // Create an ImageFactory instance for producing Image objects.
     ImageFactory factory((bool)useShm, (bool)useOverlay);
-    image = factory.newImage(dpy, geometry->width(), geometry->height());
-    vlog.info("Allocated %s", image->classDesc());
 
     // Provide pixel buffer to the server object.
-    pb = new XPixelBuffer(dpy, image,
+    // FIXME: Pass coordinates in a structure?
+    pb = new XPixelBuffer(dpy, factory,
                           geometry->offsetLeft(), geometry->offsetTop(),
+                          geometry->width(), geometry->height(),
                           this);
+    vlog.info("Allocated %s", pb->getImage()->classDesc());
+
     server = vs;
     server->setPixelBuffer(pb);
 
@@ -199,11 +201,9 @@
 
     delete pb;
     delete pollmgr;
-    delete image;
 
     pb = 0;
     pollmgr = 0;
-    image = 0;
   }
 
   inline bool isRunning() {
@@ -273,7 +273,6 @@
   Geometry* geometry;
   XPixelBuffer* pb;
   VNCServer* server;
-  Image* image;
   PollingManager* pollmgr;
   int oldButtonMask;
   bool haveXtest;