private void HandlePacket(ISynPacket packet)
        {
            var(x, y, z) = packet.GetDelta();
            if (x != 0 || y != 0 || z != 0)
            {
                // If movement is detected, disarm the button state so we don't trigger
                // middle click events when button is released.
                middleButtonDown = false;
            }
            else
            {
                var buttonState = packet.GetButtonState();

                // When set to scrolling, reports ButtonVirtualMiddle | ButtonMiddle
                // When set to middle-click, reports ButtonReportedMiddle | ButtonMiddle

                // Checking no motion between down and up when in scrolling mode, and
                // emit a middle click event on release.
                bool currentMiddleDown = (buttonState & SynButtonFlags.ButtonVirtualMiddle) != 0;
                if (middleButtonDown && !currentMiddleDown)
                {
                    // middle button was released with no other movement.
                    middleButtonDown = false;
                    if (middleButtonDownStopwatch.ElapsedMilliseconds < 250)
                    {
                        SendMiddleClick();
                    }
                }
                else if (!middleButtonDown && currentMiddleDown)
                {
                    middleButtonDown = true;
                    middleButtonDownStopwatch.Restart();
                }
            }
        }
Exemple #2
0
        public static (int, int, int) GetDelta(this ISynPacket packet)
        {
            int x = GetProperty(packet, PacketProperty.XDelta);
            int y = GetProperty(packet, PacketProperty.YDelta);
            int z = GetProperty(packet, PacketProperty.ZDelta);

            return(x, y, z);
        }
Exemple #3
0
 public void Enqueue(ISynPacket transportPacket)
 {
     throw new NotImplementedException();
 }
Exemple #4
0
 public static SynButtonFlags GetButtonState(this ISynPacket packet)
 {
     return((SynButtonFlags)GetProperty(packet, PacketProperty.ButtonState));
 }
Exemple #5
0
 public static int GetProperty(this ISynPacket packet, PacketProperty property)
 {
     packet.GetProperty((int)property, out int value);
     return(value);
 }