Commit 155f4c10 authored by dscho's avatar dscho

fix disappearing cursor

parent 47646a20
......@@ -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,6 +587,9 @@ void rfbRedrawAfterHideCursor(rfbClientPtr cl)
sraRegionPtr rect;
fprintf(stderr,"%d %d %d %d\n",x,y,x2,y2);
rect = sraRgnCreateRect(x,y,x2,y2);
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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment