fix disappearing cursor

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

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

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

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

Loading…
Cancel
Save