Skip to content

Commit

Permalink
Flush mouseMove when initiating viewport dragging
Browse files Browse the repository at this point in the history
We want to flush pending mouse moves before we initiate viewport
dragging.

Before this commit, there were scenarios where the _mouseButtonMask
would track a released button as being down.
  • Loading branch information
CendioHalim committed Jan 14, 2025
1 parent d1548c1 commit 6383fa6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
2 changes: 2 additions & 0 deletions core/rfb.js
Original file line number Diff line number Diff line change
Expand Up @@ -1103,6 +1103,8 @@ export default class RFB extends EventTargetMixin {
this._viewportDragPos = {'x': pos.x, 'y': pos.y};
this._viewportHasMoved = false;

this._flushMouseMoveTimer(pos.x, pos.y);

// Skip sending mouse events, instead save the current
// mouse mask so we can send it later.
this._mouseButtonMask = bmask;
Expand Down
18 changes: 18 additions & 0 deletions tests/test.rfb.js
Original file line number Diff line number Diff line change
Expand Up @@ -898,6 +898,24 @@ describe('Remote Frame Buffer protocol client', function () {

expect(client._display.viewportChangePos).to.not.have.been.called;
});

it('should flush move events when initiating viewport drag', function () {
sendMouseMoveEvent(13, 9, 0x0, client);
sendMouseMoveEvent(14, 9, 0x0, client);
sendMouseButtonEvent(14, 9, true, 0x1, client);

expect(RFB.messages.pointerEvent).to.have.been.calledTwice;
expect(RFB.messages.pointerEvent.firstCall).to.have.been.calledWith(client._sock,
13, 9, 0x0);
expect(RFB.messages.pointerEvent.secondCall).to.have.been.calledWith(client._sock,
14, 9, 0x0);

RFB.messages.pointerEvent.resetHistory();

clock.tick(100);

expect(RFB.messages.pointerEvent).to.not.have.been.called;;
});
});
});

Expand Down

0 comments on commit 6383fa6

Please sign in to comment.