Don't send mouse events when dragging viewport

We don't want to send any mouse events to the server when dragging the
viewport. Instead, we treat them as a client-only operation.
This commit is contained in:
Adam Halim 2025-01-13 15:43:47 +01:00
parent b9230cf23e
commit d1548c12ec
2 changed files with 8 additions and 15 deletions

View File

@ -1306,8 +1306,6 @@ export default class RFB extends EventTargetMixin {
this._viewportHasMoved = false; this._viewportHasMoved = false;
this._viewportDragging = true; this._viewportDragging = true;
this._viewportDragPos = {'x': pos.x, 'y': pos.y}; this._viewportDragPos = {'x': pos.x, 'y': pos.y};
this._fakeMouseMove(ev, pos.x, pos.y);
} else { } else {
this._fakeMouseMove(ev, pos.x, pos.y); this._fakeMouseMove(ev, pos.x, pos.y);
this._handleMouseButton(pos.x, pos.y, 0x1); this._handleMouseButton(pos.x, pos.y, 0x1);
@ -1320,8 +1318,6 @@ export default class RFB extends EventTargetMixin {
// sending any events to the server. // sending any events to the server.
this._viewportHasMoved = false; this._viewportHasMoved = false;
this._viewportDragPos = {'x': pos.x, 'y': pos.y}; this._viewportDragPos = {'x': pos.x, 'y': pos.y};
this._fakeMouseMove(ev, pos.x, pos.y);
} else { } else {
this._fakeMouseMove(ev, pos.x, pos.y); this._fakeMouseMove(ev, pos.x, pos.y);
this._handleMouseButton(pos.x, pos.y, 0x4); this._handleMouseButton(pos.x, pos.y, 0x4);
@ -1360,8 +1356,9 @@ export default class RFB extends EventTargetMixin {
this._viewportDragPos = {'x': pos.x, 'y': pos.y}; this._viewportDragPos = {'x': pos.x, 'y': pos.y};
this._display.viewportChangePos(deltaX, deltaY); this._display.viewportChangePos(deltaX, deltaY);
} }
} else {
this._fakeMouseMove(ev, pos.x, pos.y);
} }
this._fakeMouseMove(ev, pos.x, pos.y);
break; break;
case 'twodrag': case 'twodrag':
// Always scroll in the same position. // Always scroll in the same position.

View File

@ -808,8 +808,7 @@ describe('Remote Frame Buffer protocol client', function () {
gestureStart('drag', 13, 9, client); gestureStart('drag', 13, 9, client);
gestureMove('drag', 43, 9, client); gestureMove('drag', 43, 9, client);
// FIXME: We don't want to send a pointer event here expect(RFB.messages.pointerEvent).to.not.have.been.called;
// expect(RFB.messages.pointerEvent).to.not.have.been.called;
expect(client._display.viewportChangePos).to.have.been.calledOnce; expect(client._display.viewportChangePos).to.have.been.calledOnce;
expect(client._display.viewportChangePos).to.have.been.calledWith(-30, 0); expect(client._display.viewportChangePos).to.have.been.calledWith(-30, 0);
@ -834,8 +833,7 @@ describe('Remote Frame Buffer protocol client', function () {
gestureStart('longpress', 13, 9, client); gestureStart('longpress', 13, 9, client);
gestureMove('longpress', 14, 9, client); gestureMove('longpress', 14, 9, client);
// FIXME: We don't want to send a pointer event here expect(RFB.messages.pointerEvent).to.not.have.been.called;
// expect(RFB.messages.pointerEvent).to.not.have.been.called;
expect(client._display.viewportChangePos).to.not.have.been.called; expect(client._display.viewportChangePos).to.not.have.been.called;
client._display.viewportChangePos.resetHistory(); client._display.viewportChangePos.resetHistory();
@ -845,8 +843,7 @@ describe('Remote Frame Buffer protocol client', function () {
gestureEnd('longpress', 43, 9, client); gestureEnd('longpress', 43, 9, client);
expect(RFB.messages.pointerEvent).to.not.have.been.called; expect(RFB.messages.pointerEvent).to.not.have.been.called;
// FIXME: We only want to move the viewport once expect(client._display.viewportChangePos).to.have.been.calledOnce;
// expect(client._display.viewportChangePos).to.have.been.calledOnce;
expect(client._display.viewportChangePos).to.have.been.calledWith(-30, 0); expect(client._display.viewportChangePos).to.have.been.calledWith(-30, 0);
}); });
@ -857,8 +854,7 @@ describe('Remote Frame Buffer protocol client', function () {
gestureStart('longpress', 13, 9, client); gestureStart('longpress', 13, 9, client);
gestureMove('longpress', 14, 10, client); gestureMove('longpress', 14, 10, client);
// FIXME: We don't want to send a pointer event here expect(RFB.messages.pointerEvent).to.not.have.been.called;
// expect(RFB.messages.pointerEvent).to.not.have.been.called;
expect(client._display.viewportChangePos).to.not.have.been.called; expect(client._display.viewportChangePos).to.not.have.been.called;
client._display.viewportChangePos.resetHistory(); client._display.viewportChangePos.resetHistory();
@ -870,9 +866,9 @@ describe('Remote Frame Buffer protocol client', function () {
expect(RFB.messages.pointerEvent.firstCall).to.have.been.calledWith(client._sock, expect(RFB.messages.pointerEvent.firstCall).to.have.been.calledWith(client._sock,
14, 9, 0x0); 14, 9, 0x0);
expect(RFB.messages.pointerEvent.secondCall).to.have.been.calledWith(client._sock, expect(RFB.messages.pointerEvent.secondCall).to.have.been.calledWith(client._sock,
14, 9, 0x4); 14, 9, 0x4);
expect(RFB.messages.pointerEvent.thirdCall).to.have.been.calledWith(client._sock, expect(RFB.messages.pointerEvent.thirdCall).to.have.been.calledWith(client._sock,
14, 9, 0x0); 14, 9, 0x0);
expect(client._display.viewportChangePos).to.not.have.been.called; expect(client._display.viewportChangePos).to.not.have.been.called;
}); });