Only update rendered cursor when requested
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index 64adda1..ea50f83 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -997,8 +997,7 @@
Region req;
UpdateInfo ui;
bool needNewUpdateInfo;
- bool drawRenderedCursor;
- RenderedCursor *cursor;
+ const RenderedCursor *cursor;
updates.enable_copyrect(cp.useCopyRect);
@@ -1064,21 +1063,21 @@
// with the update region, we need to draw the rendered cursor regardless of
// whether it has changed.
- drawRenderedCursor = false;
+ cursor = NULL;
if (needRenderedCursor()) {
Rect renderedCursorRect;
+ cursor = server->getRenderedCursor();
+
renderedCursorRect
- = server->renderedCursor.getEffectiveRect()
- .intersect(req.get_bounding_rect());
+ = cursor->getEffectiveRect().intersect(req.get_bounding_rect());
if (renderedCursorRect.is_empty()) {
- drawRenderedCursor = false;
- } else if (updateRenderedCursor) {
- drawRenderedCursor = true;
- } else if (!ui.changed.union_(ui.copied)
+ cursor = NULL;
+ } else if (!updateRenderedCursor &&
+ ui.changed.union_(ui.copied)
.intersect(renderedCursorRect).is_empty()) {
- drawRenderedCursor = true;
+ cursor = NULL;
}
// We could remove the new cursor rect from updates here. It's not clear
@@ -1086,7 +1085,7 @@
// the same bit of screen twice, but we have the overhead of a more complex
// region.
- //if (drawRenderedCursor) {
+ //if (cursor) {
// updates.subtract(renderedCursorRect);
// updates.getUpdateInfo(&ui, req);
//}
@@ -1095,13 +1094,9 @@
updateRenderedCursor = false;
}
- if (ui.is_empty() && !writer()->needFakeUpdate() && !drawRenderedCursor)
+ if (ui.is_empty() && !writer()->needFakeUpdate() && !cursor)
return;
- cursor = NULL;
- if (drawRenderedCursor)
- cursor = &server->renderedCursor;
-
writeRTTPing();
encodeManager.writeUpdate(ui, server->getPixelBuffer(), cursor);