@@ -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