Skip to content

Commit 39355fb

Browse files
committed
VNCConn: let it send a button up for each button 4 or 5 down
Fixes scrolling for some VNC servers like TigerVNC and others. Closes #263
1 parent 5bf2adc commit 39355fb

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

src/VNCConn.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,6 +1326,9 @@ void VNCConn::sendPointerEvent(wxMouseEvent &event)
13261326

13271327
pointerEvent pev = {event.m_x, event.m_y, 0, event.Entering()};
13281328

1329+
/*
1330+
Populate buttonmask with pressed buttons
1331+
*/
13291332
if(event.LeftIsDown())
13301333
pev.buttonmask |= rfbButton1Mask;
13311334

@@ -1335,14 +1338,36 @@ void VNCConn::sendPointerEvent(wxMouseEvent &event)
13351338
if(event.RightIsDown())
13361339
pev.buttonmask |= rfbButton3Mask;
13371340

1338-
if(event.GetWheelRotation() > 0)
1339-
pev.buttonmask |= rfbWheelUpMask;
1341+
if (event.GetWheelRotation() != 0 && event.GetWheelAxis() == wxMOUSE_WHEEL_VERTICAL) {
1342+
1343+
if(event.GetWheelRotation() > 0) {
1344+
pev.buttonmask |= rfbWheelUpMask;
1345+
}
13401346

1341-
if(event.GetWheelRotation() < 0)
1342-
pev.buttonmask |= rfbWheelDownMask;
1347+
if(event.GetWheelRotation() < 0) {
1348+
pev.buttonmask |= rfbWheelDownMask;
1349+
}
1350+
}
13431351

1352+
// Queue event
13441353
if(GetThread() && GetThread()->IsRunning())
13451354
pointer_event_q.Post(pev);
1355+
1356+
// For each queued button 4 or 5 down, queue another synthesised button 4 or 5 up
1357+
if (pev.buttonmask & rfbWheelUpMask || pev.buttonmask & rfbWheelDownMask) {
1358+
1359+
if (pev.buttonmask & rfbWheelUpMask) {
1360+
pev.buttonmask ^= rfbWheelUpMask;
1361+
}
1362+
1363+
if (pev.buttonmask & rfbWheelDownMask) {
1364+
pev.buttonmask ^= rfbWheelDownMask;
1365+
}
1366+
1367+
if(GetThread() && GetThread()->IsRunning())
1368+
pointer_event_q.Post(pev);
1369+
}
1370+
13461371
}
13471372

13481373

0 commit comments

Comments
 (0)