Here is the patch I am testing now:
--- vnc-4.0b4-unixsrc/rfb/SMsgWriter.cxx.crash 2003-06-27 14:10:14.000000000 +0100
+++ vnc-4.0b4-unixsrc/rfb/SMsgWriter.cxx 2003-11-08 13:54:12.000000000 +0000
@@ -92,9 +92,19 @@
void SMsgWriter::writeFramebufferUpdate(const UpdateInfo& ui, ImageGetter* ig)
{
- writeFramebufferUpdateStart(ui.numRects());
- writeRects(ui, ig);
- writeFramebufferUpdateEnd();
+ int n = ui.numRects ();
+ std::vector<Rect>::const_iterator i;
+ for (i = ui.copied.begin (); i != ui.copied.end (); i++)
+ if (!(i->width () && i->height ()))
+ n--;
+ for (i = ui.changed.begin (); i != ui.changed.end (); i++)
+ if (!(i->width () && i->height ()))
+ n--;
+ if (n) {
+ writeFramebufferUpdateStart(ui.numRects());
+ writeRects(ui, ig);
+ writeFramebufferUpdateEnd();
+ }
}
void SMsgWriter::writeRects(const UpdateInfo& ui, ImageGetter* ig)
@@ -105,10 +115,8 @@
writeCopyRect(*i, i->tl.x - ui.copy_delta.x, i->tl.y - ui.copy_delta.y);
}
- for (i = ui.changed.begin(); i != ui.changed.end(); i++) {
- if (i->width() && i->height())
- writeRect(*i, ig);
- }
+ for (i = ui.changed.begin(); i != ui.changed.end(); i++)
+ writeRect(*i, ig);
}
@@ -119,7 +127,8 @@
void SMsgWriter::writeRect(const Rect& r, ImageGetter* ig)
{
- writeRect(r, cp->currentEncoding(), ig);
+ if (r.width() && r.height())
+ writeRect(r, cp->currentEncoding(), ig);
}
void SMsgWriter::writeRect(const Rect& r, unsigned int encoding,
--- vnc-4.0b4-unixsrc/rfb/VNCSConnectionST.cxx.crash 2003-11-08 13:54:12.000000000
+0000
+++ vnc-4.0b4-unixsrc/rfb/VNCSConnectionST.cxx 2003-11-08 14:18:12.000000000 +0000
@@ -485,13 +485,21 @@
updates.enable_copyrect(cp.useCopyRect);
updates.flush_update(info, requested);
if (!info.is_empty() || writer()->needFakeUpdate() || drawRenderedCursor) {
- int nRects = info.numRects() + (drawRenderedCursor ? 1 : 0);
- writer()->writeFramebufferUpdateStart(nRects);
- writer()->writeRects(info, &image_getter);
- if (drawRenderedCursor)
- writeRenderedCursorRect();
- writer()->writeFramebufferUpdateEnd();
- requested.clear();
+ int nRects = info.numRects();
+ int rendered_cursor_nonzero = 0;
+ if (drawRenderedCursor &&
+ renderedCursorRect.width () &&
+ renderedCursorRect.height ())
+ rendered_cursor_nonzero = 1;
+ nRects += rendered_cursor_nonzero;
+ if (nRects) {
+ writer()->writeFramebufferUpdateStart(nRects);
+ writer()->writeRects(info, &image_getter);
+ if (rendered_cursor_nonzero)
+ writeRenderedCursorRect();
+ writer()->writeFramebufferUpdateEnd();
+ requested.clear();
+ }
}
}
_______________________________________________
VNC-List mailing list
[EMAIL PROTECTED]
To remove yourself from the list visit:
http://www.realvnc.com/mailman/listinfo/vnc-list