fix disappearing cursor

pull/1/head
dscho 19 years ago
parent 47646a200f
commit 155f4c1053

@ -570,7 +570,7 @@ void rfbShowCursor(rfbClientPtr cl)
* region gets redrawn.
*/
void rfbRedrawAfterHideCursor(rfbClientPtr cl)
void rfbRedrawAfterHideCursor(rfbClientPtr cl,sraRegionPtr updateRegion)
{
rfbScreenInfoPtr s = cl->screen;
rfbCursorPtr c = s->cursor;
@ -587,7 +587,10 @@ void rfbRedrawAfterHideCursor(rfbClientPtr cl)
sraRegionPtr rect;
fprintf(stderr,"%d %d %d %d\n",x,y,x2,y2);
rect = sraRgnCreateRect(x,y,x2,y2);
sraRgnOr(cl->modifiedRegion,rect);
if(updateRegion)
sraRgnOr(updateRegion,rect);
else
sraRgnOr(cl->modifiedRegion,rect);
sraRgnDestroy(rect);
}
}
@ -620,7 +623,7 @@ void rfbSetCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr c)
iterator=rfbGetClientIterator(rfbScreen);
while((cl=rfbClientIteratorNext(iterator)))
if(!cl->enableCursorShapeUpdates)
rfbRedrawAfterHideCursor(cl);
rfbRedrawAfterHideCursor(cl,0);
rfbReleaseClientIterator(iterator);
if(rfbScreen->cursor->cleanup)
@ -633,7 +636,7 @@ void rfbSetCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr c)
while((cl=rfbClientIteratorNext(iterator))) {
cl->cursorWasChanged = TRUE;
if(!cl->enableCursorShapeUpdates)
rfbRedrawAfterHideCursor(cl);
rfbRedrawAfterHideCursor(cl,0);
}
rfbReleaseClientIterator(iterator);

@ -50,9 +50,6 @@ char rfbEndianTest = -1;
void rfbIncrClientRef(rfbClientPtr cl);
void rfbDecrClientRef(rfbClientPtr cl);
/* cursor.c */
void rfbRedrawAfterHideCursor(rfbClientPtr cl);
void rfbLogEnable(int enabled) {
rfbEnableLogging=enabled;
}

@ -64,7 +64,7 @@
void rfbShowCursor(rfbClientPtr cl);
void rfbHideCursor(rfbClientPtr cl);
void rfbRedrawAfterHideCursor(rfbClientPtr cl);
void rfbRedrawAfterHideCursor(rfbClientPtr cl,sraRegionPtr updateRegion);
static void rfbProcessClientProtocolVersion(rfbClientPtr cl);
static void rfbProcessClientNormalMessage(rfbClientPtr cl);
@ -828,7 +828,7 @@ rfbProcessClientNormalMessage(cl)
cl->host);
/* if cursor was drawn, hide the cursor */
if(!cl->enableCursorShapeUpdates)
rfbRedrawAfterHideCursor(cl);
rfbRedrawAfterHideCursor(cl,0);
cl->enableCursorShapeUpdates = TRUE;
cl->cursorWasChanged = TRUE;
@ -839,7 +839,7 @@ rfbProcessClientNormalMessage(cl)
cl->host);
/* if cursor was drawn, hide the cursor */
if(!cl->enableCursorShapeUpdates)
rfbRedrawAfterHideCursor(cl);
rfbRedrawAfterHideCursor(cl,0);
cl->enableCursorShapeUpdates = TRUE;
cl->useRichCursorEncoding = TRUE;
@ -1217,12 +1217,12 @@ rfbSendFramebufferUpdate(cl, givenUpdateRegion)
if (!cl->enableCursorShapeUpdates) {
if(cl->cursorX != cl->screen->cursorX || cl->cursorY != cl->screen->cursorY) {
rfbRedrawAfterHideCursor(cl);
rfbRedrawAfterHideCursor(cl,updateRegion);
LOCK(cl->screen->cursorMutex);
cl->cursorX = cl->screen->cursorX;
cl->cursorY = cl->screen->cursorY;
UNLOCK(cl->screen->cursorMutex);
rfbRedrawAfterHideCursor(cl);
rfbRedrawAfterHideCursor(cl,updateRegion);
}
rfbShowCursor(cl);
}

Loading…
Cancel
Save