Browse Source

Merge pull request #1718 from MikeLooijmans/server-mousebuttonowner-timeout

VNCServerST: Add a timeout to pointer button ownership
pull/1722/head
linma (ThinLinc team) 3 months ago
parent
commit
6050b1530c
No account linked to committer's email address
2 changed files with 8 additions and 2 deletions
  1. 6
    2
      common/rfb/VNCServerST.cxx
  2. 2
    0
      common/rfb/VNCServerST.h

+ 6
- 2
common/rfb/VNCServerST.cxx View File

@@ -83,6 +83,7 @@ VNCServerST::VNCServerST(const char* name_, SDesktop* desktop_)
: blHosts(&blacklist), desktop(desktop_), desktopStarted(false),
blockCounter(0), pb(0), ledState(ledUnknown),
name(name_), pointerClient(0), clipboardClient(0),
pointerClientTime(0),
comparer(0), cursor(new Cursor(0, 0, Point(), NULL)),
renderedCursorInvalid(false),
keyRemapper(&KeyRemapper::defInstance),
@@ -484,14 +485,17 @@ void VNCServerST::keyEvent(uint32_t keysym, uint32_t keycode, bool down)
void VNCServerST::pointerEvent(VNCSConnectionST* client,
const Point& pos, int buttonMask)
{
time_t now = time(0);
if (rfb::Server::maxIdleTime)
idleTimer.start(secsToMillis(rfb::Server::maxIdleTime));

// Let one client own the cursor whilst buttons are pressed in order
// to provide a bit more sane user experience
if ((pointerClient != NULL) && (pointerClient != client))
// to provide a bit more sane user experience. But limit the time to prevent
// locking out all others when e.g. the network is down.
if ((pointerClient != NULL) && (pointerClient != client) && ((now - pointerClientTime) < 3))
return;

pointerClientTime = now;
if (buttonMask)
pointerClient = client;
else

+ 2
- 0
common/rfb/VNCServerST.h View File

@@ -191,6 +191,8 @@ namespace rfb {
std::list<VNCSConnectionST*> clipboardRequestors;
std::list<network::Socket*> closingSockets;

time_t pointerClientTime;

ComparingUpdateTracker* comparer;

Point cursorPos;

Loading…
Cancel
Save