From 5455cc5756c9b5efbc6540dc706123290b0c7ebd Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Thu, 5 Mar 2020 14:59:51 -0800 Subject: [PATCH] Updated logic on linux, so remote cursor is rendered based on last known remote injection coordinate, rather than time --- meshcore/KVM/Linux/linux_kvm.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/meshcore/KVM/Linux/linux_kvm.c b/meshcore/KVM/Linux/linux_kvm.c index 7a92461..4eca716 100644 --- a/meshcore/KVM/Linux/linux_kvm.c +++ b/meshcore/KVM/Linux/linux_kvm.c @@ -92,7 +92,8 @@ int slave2master[2]; FILE *logFile = NULL; int g_enableEvents = 0; extern int gRemoteMouseRenderDefault; -uint64_t gMouseInputTime = 0; + +int remoteMouseX = 0, remoteMouseY = 0; ILibQueue g_messageQ; @@ -488,14 +489,16 @@ int kvm_server_inputdata(char* block, int blocklen) short w = 0; if (size == 10 || size == 12) { - gMouseInputTime = (uint64_t)ILibGetUptime(); - x = ((int)ntohs(((unsigned short*)(block))[3])); y = ((int)ntohs(((unsigned short*)(block))[4])); if (size == 12) w = ((short)ntohs(((short*)(block))[5])); if (logFile) { fprintf(logFile, "RemoteMouseMove: (%d, %d)\n", x, y); } // printf("x:%d, y:%d, b:%d, w:%d\n", x, y, block[5], w); - if (g_enableEvents) MouseAction(x, y, (int)(unsigned char)(block[5]), w, eventdisplay); + if (g_enableEvents) + { + remoteMouseX = x, remoteMouseY = y; + MouseAction(x, y, (int)(unsigned char)(block[5]), w, eventdisplay); + } } break; } @@ -1014,9 +1017,7 @@ void* kvm_server_mainloop(void* parm) &rr, &cr, &rx, &ry, &wx, &wy, &mr); if (rs == 1 && cursordisplay != NULL) { - uint64_t ct = ILibGetUptime(); - - if (gRemoteMouseRenderDefault != 0 || ((gMouseInputTime < ct ? (ct - gMouseInputTime > 1500) : 0) != 0)) + if (gRemoteMouseRenderDefault != 0 || (remoteMouseX != rx && remoteMouseY != ry)) { cimage = (char*)xfixes_exports->XFixesGetCursorImage(cursordisplay); unsigned short w = ((unsigned short*)(cimage + 4))[0];