Hi all,

vncviewer doesn't receive clipboard selection from server.

CMsgReader::readServerCutText function calls handler->serverCutText()
but this call is not correctly propagated to the corresponding CConn method.
After inspection main problem is wrong prototype of the
CConn::serverCutText function. It has to be same as prototype of the
CMsgHandler::serverCutText function.

I also modified CMsgHandler class to contain pure virtual methods
instead of methods with empty body. This modification will eliminate
annoying problems like bad CConn::serverCutText prototype in future.

Patch should be commited to both 1.0 and trunk.

Regards, Adam

-- 
Adam Tkac, Red Hat, Inc.
Index: unix/vncviewer/CConn.h
===================================================================
--- unix/vncviewer/CConn.h      (revision 3834)
+++ unix/vncviewer/CConn.h      (working copy)
@@ -80,7 +80,7 @@
   void setName(const char* name);
   void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs);
   void bell();
-  void serverCutText(const char* str, int len);
+  void serverCutText(const char* str, rdr::U32 len);
   void framebufferUpdateStart();
   void framebufferUpdateEnd();
   void beginRect(const rfb::Rect& r, unsigned int encoding);
Index: unix/vncviewer/CConn.cxx
===================================================================
--- unix/vncviewer/CConn.cxx    (revision 3834)
+++ unix/vncviewer/CConn.cxx    (working copy)
@@ -389,7 +389,7 @@
 
 void CConn::bell() { XBell(dpy, 0); }
 
-void CConn::serverCutText(const char* str, int len) {
+void CConn::serverCutText(const char* str, rdr::U32 len) {
   desktop->serverCutText(str,len);
 }
 
Index: common/rfb/CMsgHandler.h
===================================================================
--- common/rfb/CMsgHandler.h    (revision 3834)
+++ common/rfb/CMsgHandler.h    (working copy)
@@ -49,24 +49,24 @@
                                         int w, int h,
                                         const ScreenSet& layout);
     virtual void setCursor(int width, int height, const Point& hotspot,
-                           void* data, void* mask);
+                           void* data, void* mask) = 0;
     virtual void setPixelFormat(const PixelFormat& pf);
     virtual void setName(const char* name);
-    virtual void serverInit();
+    virtual void serverInit() = 0;
 
-    virtual void framebufferUpdateStart();
-    virtual void framebufferUpdateEnd();
-    virtual void beginRect(const Rect& r, unsigned int encoding);
-    virtual void endRect(const Rect& r, unsigned int encoding);
+    virtual void framebufferUpdateStart() = 0;
+    virtual void framebufferUpdateEnd() = 0;
+    virtual void beginRect(const Rect& r, unsigned int encoding) = 0;
+    virtual void endRect(const Rect& r, unsigned int encoding) = 0;
 
     virtual void setColourMapEntries(int firstColour, int nColours,
-                                    rdr::U16* rgbs);
-    virtual void bell();
-    virtual void serverCutText(const char* str, rdr::U32 len);
+                                    rdr::U16* rgbs) = 0;
+    virtual void bell() = 0;
+    virtual void serverCutText(const char* str, rdr::U32 len) = 0;
 
-    virtual void fillRect(const Rect& r, Pixel pix);
-    virtual void imageRect(const Rect& r, void* pixels);
-    virtual void copyRect(const Rect& r, int srcX, int srcY);
+    virtual void fillRect(const Rect& r, Pixel pix) = 0;
+    virtual void imageRect(const Rect& r, void* pixels) = 0;
+    virtual void copyRect(const Rect& r, int srcX, int srcY) = 0;
 
     ConnParams cp;
   };
Index: common/rfb/CMsgHandler.cxx
===================================================================
--- common/rfb/CMsgHandler.cxx  (revision 3834)
+++ common/rfb/CMsgHandler.cxx  (working copy)
@@ -55,10 +55,6 @@
   cp.screenLayout = layout;
 }
 
-void CMsgHandler::setCursor(int w, int h, const Point& hotspot, void* data, 
void* mask)
-{
-}
-
 void CMsgHandler::setPixelFormat(const PixelFormat& pf)
 {
   cp.setPF(pf);
@@ -69,50 +65,3 @@
   cp.setName(name);
 }
 
-void CMsgHandler::serverInit()
-{
-  throw Exception("CMsgHandler::serverInit called");
-}
-
-void CMsgHandler::framebufferUpdateStart()
-{
-}
-
-void CMsgHandler::framebufferUpdateEnd()
-{
-}
-
-void CMsgHandler::beginRect(const Rect& r, unsigned int encoding)
-{
-}
-
-void CMsgHandler::endRect(const Rect& r, unsigned int encoding)
-{
-}
-
-
-void CMsgHandler::setColourMapEntries(int firstColour, int nColours,
-                                      rdr::U16* rgbs)
-{
-  throw Exception("CMsgHandler::setColourMapEntries called");
-}
-
-void CMsgHandler::bell()
-{
-}
-
-void CMsgHandler::serverCutText(const char* str, rdr::U32 len)
-{
-}
-
-void CMsgHandler::fillRect(const Rect& r, Pixel pix)
-{
-}
-
-void CMsgHandler::imageRect(const Rect& r, void* pixels)
-{
-}
-
-void CMsgHandler::copyRect(const Rect& r, int srcX, int srcY)
-{
-}
Index: win/vncviewer/CConn.h
===================================================================
--- win/vncviewer/CConn.h       (revision 3834)
+++ win/vncviewer/CConn.h       (working copy)
@@ -97,6 +97,7 @@
       CSecurity* getCSecurity(int secType);
       void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs);
       void bell();
+      void framebufferUpdateStart() {}
       void framebufferUpdateEnd();
       void setDesktopSize(int w, int h);
       void setExtendedDesktopSize(int reason, int result, int w, int h,
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Tigervnc-devel mailing list
Tigervnc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-devel

Reply via email to